我可以打开带有C函数(fopen
)的文件并将该句柄分配给C ++文件流(fstream
...)吗?
询问原因:我想在Windows上处理UTF8,但fstream
类只有const char*
ctor / open方法。所以我需要使用C API打开它,然后让流对象使用它。
甚至可以使用boost流库,因为它通常允许指定您自己的接收器/源,但我不知道从哪里开始。
澄清:我想打开一个文件,其路径为UTF8字符串。因此,文件打开方法必须支持fstream
没有的UTF8路径。接受const wchar_t*
的MSVC扩展确实有帮助,但MinGW不提供这些重载。所以我需要在Windows上使用wfopen
。
答案 0 :(得分:1)
我可以打开带有C函数(
fopen
)的文件并将该句柄分配给C ++文件流(fstream
...)吗?
不直接,不。但是您可以编写(或查找)使用FILE*
处理I / O的自定义std::streambuf
派生类,然后将该类的实例分配给标准std::istream
对象。请参阅std::basic_filebuf
的实现以帮助您,或GNU的stdio_filebuf
类。
我想打开一个文件,其路径为UTF8字符串。因此,文件打开方法必须支持
fstream
没有的UTF8路径。接受const wchar_t*
的MSVC扩展确实有帮助,但MinGW不提供这些重载。所以我需要在Windows上使用wfopen
。
Windows上的大多数Unicode API不支持UTF-8,仅支持UTF-16。因此,Visual C ++和其他兼容编译器中的wchar_t
重载。 Mingw根本不支持这些扩展。但是,有第三方解决方案。例如Pathie(请参阅Pathie::ifstream
和Pathie::ofstream
类)。