使用非MSVC编译器在Windows下使用带Unicode文件名的文件打开fstream

当文件名是“Unicode”文件名时,我需要打开一个文件作为std :: fstream(或实际上任何其他std :: ostream)。

在MSVC下,我有非标准扩展std::fstream::open(wchar_t const *,...) ? 我可以用其他编译器如GCC(最重要的)和Borland编译器做些什么。

我知道CRTL提供了_wfopen但它提供了C FILE *接口而不是io-streams,也许有一个非标准的方式来从FILE *创buildio-stream? 是否有任何boost::ifstream MSVC扩展为Windows?

不幸的是,虽然C ++ 0x(1x)允诺做到这一点,但没有标准的方法来做到这一点。 在此之前,您正确地认为可以在Boost中找到解决方案,但是您要搜索的库是Boost.Filesystem 。

Boost.Filesystem在其内部通用路径系统默认使用宽字符串,所以在这方面没有unicode问题。

目前没有简单的解决方案。

你需要创建你自己的流缓冲区,在_wfopen使用_wfopen 你可以使用这个例如boost::iostream

使用类似wcstombs()WideCharToMultiByte()将Unicode文件名转换为char*字符串(这使您可以更好地控制所涉及的代码页)。

然后使用转换后的文件名来打开文件。