gpt4 book ai didi

c++ - 使用 std::wofstream 写入文件。该文件仍然是空的

转载 作者:IT老高 更新时间:2023-10-28 21:45:43 25 4
gpt4 key购买 nike

我使用VS2008编写了以下程序:

#include <fstream>
int main()
{
std::wofstream fout("myfile");
fout << L"Հայաստան Россия Österreich Ελλάδα भारत" << std::endl;
}

当我尝试编译它时,IDE 询问我是否想以 unicode 格式保存我的源文件,我说“是的,请”。
然后我运行程序,myfile 出现在我的项目文件夹中。我用记事本打开它,文件是空的。我记得记事本只支持 ASCII 数据。我用写字板打开它,它仍然是空的。最后,我内心的小天才敦促我查看文件大小,毫不奇怪它是 0 字节。所以我重建并重新运行程序,没有效果。最后,我决定在 StackOverflow 上向非常聪明的人询问我缺少什么,我在这里:)

已编辑:

在上述聪明人发表了一些意见后,我决定听从他们的建议,将程序改写成这样:

#include <fstream>
#include <iostream>
int main()
{
std::wofstream fout("myfile");
if(!fout.is_open())
{
std::cout << "Before: Not open...\n";
}
fout << L"Հայաստան Россия Österreich Ελλάδα भारत" << std::endl;
if(!fout.good())
{
std::cout << "After: Not good...\n";
}
}

build 它。跑了。而且......控制台清楚地显示,令我惊讶的是:“之后:不好......”。所以我编辑了我的帖子以提供新信息,并开始等待答案来解释为什么会这样以及我能做什么。 :)

最佳答案

MSVC 提供 codecvt_utf8这个问题的语言环境方面。

#include <codecvt>

// ...
std::wofstream fout(fileName);
std::locale loc(std::locale::classic(), new std::codecvt_utf8<wchar_t>);
fout.imbue(loc);

关于c++ - 使用 std::wofstream 写入文件。该文件仍然是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com