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

Art*_*yom 10 c++ windows unicode gcc wide-api

当文件名是"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扩展?

Kor*_*icz 7

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

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

  • @art的问题是,在发明utf8之前,windows支持unicode,而宽广是当时的最佳选择.骰子现在被铸造了. (5认同)
  • 问题是`boost :: filesystem`不支持MinGW/GCC下的wpath,因为boost配置由于某种原因定义了`BOOST_NO_STD_WSTRING`(甚至宽字符串在mingw下工作得很好) (4认同)

Art*_*yom 3

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

您需要创建自己的流缓冲区并_wfopen在后台使用。例如,您可以为此使用boost::iostream