【发布时间】:2014-09-16 03:31:36
【问题描述】:
我们有一个基于 VC6 编译器的维护项目。在代码的某些部分,我们有一个使用 ifstream.open() 方法的文件打开函数,当文件名包含中文字符等 UNICODE 字符时,该函数会失败。由于 VC6 编译器不支持 wchar_t* 版本的 open 函数,有没有办法可以打开这种类型的文件?我也尝试了 FILE* _wfopen 方法,但它也失败了。
提前致谢
根据 RemyLebeau 的指导 - 我尝试使用 errno,我得到的值为 22,表示参数无效。请看我的代码 std::wstring 文件名=_wgetenv(L"IVT_FILENAME"); 文件*流; 流=_wfopen(filename.c_str(),L"r");
这在 vc9 中工作得非常好,文件打开并且我能够读取内容。不知道为什么它在vc6中不起作用。 stream的值为NULL
【问题讨论】:
-
声明它是一个限制并继续前进。
-
支持Visual Studio 6.0
_wfopen: msdn.microsoft.com/en-us/library/aa246392(v=vs.60).aspx -
它确实支持 _wfopen 但它无法打开包含 unicode 字符的文件名并为 FILE* 对象返回 null。 GetLastError 返回代码 123- 未找到文件名。当我将相同的代码复制粘贴到 Visual Studio 8.0 时,它会顺利通过
-
如果
_wfopen()失败并说找不到文件,那么要么确实找不到文件(更有可能),要么_wfopen()本身有错误(不太可能)。仔细检查您输入的 Unicode 数据以确保它是正确的。顺便说一句,如果你read the documentation,_wfopen()不使用GetLastError()进行错误报告,它会使用errno。 -
@RemyLebeau:我确实检查了文件的存在。该文件非常存在。此外,当我将相同的代码复制粘贴到 VC9 时,文件打开时没有任何问题。所以我怀疑这与VC6有关。
标签: c++ unicode visual-c++-6