将C文件句柄分配给C 文件流

Assigning a C file handle to C++ file stream

本文关键字:文件 分配 文件句柄      更新时间:2023-10-16

我可以打开一个具有C函数(fopen)的文件,并将其分配给C 文件流(fstream ...)?

询问的原因:我想在Windows上处理UTF8,但是fstream类只有const char* CTOR/OPEN方法。因此,我需要使用C API打开它,然后将流对象使用。

Boost流库甚至可能是可能的,因为它通常允许指定您自己的水槽/来源,但我不知道从哪里开始。

澄清:我想打开带有路径为UTF8字符串的路径的文件。因此,文件打开方法必须支持fstream不得的UTF8路径。接受const wchar_t*的MSVC扩展确实有帮助,但是MINGW不能提供这些过载。因此,我需要在Windows上使用wfopen

我可以打开具有C函数(fopen)的文件,并将其分配给C 文件流(fstream ...)?

不是直接,否。但是,您可以使用FILE*编写(或查找)自定义std::streambuf派生类,该类可处理I/O,然后将该类的实例分配给标准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。因此,wchar_t在Visual C 和其他兼容编译器中的过载。mingw根本不支持这些扩展。不过,有第三方解决方案。例如Pathie(请参阅Pathie::ifstreamPathie::ofstream类)。