【发布时间】:2017-09-26 03:13:08
【问题描述】:
我可以用 C 函数 (fopen) 打开一个文件并将该句柄分配给 C++ 文件流 (fstream...) 吗?
询问原因:我想在 Windows 上处理 UTF8,但 fstream 类只有一个 const char* ctor/open 方法。所以我需要使用 C API 打开它,然后让一个流对象使用它。
甚至可以使用 boost 流库,因为它通常允许指定您自己的接收器/源,但我不知道从哪里开始。
澄清:我想打开一个路径为 UTF8 字符串的文件。所以文件打开方法必须支持fstream不支持的UTF8路径。接受 const wchar_t* 的 MSVC 扩展确实有帮助,但 MinGW 不提供这些重载。所以我需要在 Windows 上使用wfopen。
【问题讨论】:
-
我可能遗漏了一些东西,但
UTF-8需要正常宽度的char*缓冲区。此外,fstream open 方法只处理文件名,因此文件包含的编码没有区别。您能否更具体地说明为什么使用 fstream 无法打开文件? -
从
fstream读取字符串取决于分配给它的语言环境。 -
文件名是 UTF8。在上面添加了