当文件名是“Unicode”文件名时,我需要以std :: fstream(或实际上任何其他std :: ostream)的形式打开文件。
在MSVC下,我有非标准扩展程序std::fstream::open(wchar_t const *,...)
?我可以用其他编译器做什么,比如GCC(最重要的)和Borland编译器。
我知道CRTL提供了_wfopen
但是它提供了C FILE *
接口而不是io-streams,也许有一种非标准方法可以从FILE *
创建io-stream?是否有boost::ifstream
的MSVC扩展名为Windows?
答案 0 :(得分:7)
不幸的是,没有标准的方法可以做到这一点,虽然C ++ 0x(1x?)承诺这样做。在此之前,您正确地认为可以在Boost中找到解决方案,但是,您要搜索的库是Boost.Filesystem。
Boost.Filesystem默认在内部使用宽字符串作为其通用路径系统,因此在这方面没有unicode问题。
答案 1 :(得分:3)
目前没有简单的解决方案。
您需要创建自己的流缓冲区,使用_wfopen
。您可以使用此示例boost::iostream
答案 2 :(得分:-3)
使用char*
或wcstombs()
之类的内容将Unicode文件名转换为WideCharToMultiByte()
字符串(这样可以更好地控制所涉及的代码页)。
然后使用转换的文件名打开文件。