我正在尝试让我(目前正在处理Windows)的代码更加独立于平台。这个小片段用于打开文本文件(用于读/写)。
与现代pc一样,许多文件都存储为unicode。现在在这个问题中,我特别想知道打开这样一个文件的正确方法是什么。 (文件名可以是unicode)。
在Windows上,使用microsoft visual studio,我使用了
char* filename("c:\\\xD0\x92.txt");
#ifdef _WIN32
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
#else
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
//non windows wstring = utf8
#endif
std::wstring wfilename(converter.from_bytes(filename));
std::fstream fstream(wfilename);
但是我刚刚意识到这不是标准的C ++ 11,而是视觉工作室(仅限?)扩展。但是,当我尝试在Windows上首先将宽带转换为UTF-8 std :: string并以这种方式打开文件时,fstream不会识别文件名。
那么什么是跨平台解决方案? - 我是否应该期望std :: fstream始终接受宽带输入?或者,我是否应该始终在Windows上预期这一点?
如果possix系统不在他们的目录中使用宽字符串;他们用什么?