当文件名是"Unicode"文件名时,我需要打开一个文件作为std :: fstream(或实际上任何其他std :: ostream).
在MSVC下我有非标准的扩展名std::fstream::open(wchar_t const *,...)?我可以用其他编译器做什么,比如GCC(最重要的)和Borland编译器.
我知道CRTL提供_wfopen但是它提供了C FILE *接口而不是io-stream,也许有一种非标准的方法来创建io-stream FILE *?有没有boost::ifstream像MSVC一样的Windows扩展?
在我正在研究的项目中,我处理了很多字符串操作; 从二进制文件中读取字符串及其编码(可以是单字节或双字节).本质上,我读取字符串值为vector<char>,读取编码,然后将所有字符串转换为wstring,以保持一致性.
这工作得相当好,但文件名本身可以是双字节字符.我完全不知道如何实际打开输入流.在CI中会使用_wfopen函数传递wchar_t* path,但wifstream似乎表现不同,因为它专门用于从文件中读取双字节字符,而不是从具有双字节文件名的文件中读取单个字节.
这个问题的解决方案是什么?
编辑:搜索网络,看起来在标准C++中根本不支持这一点(例如,请参阅此讨论).但是我想知道C++ 11是否真的在这方面添加了一些有用的东西.