STL Tips

来源:互联网 发布:阴囊不舒服知乎 编辑:程序博客网 时间:2024/06/10 14:58

std::ifstream 无法读中文路径

========================================
std::ifstream file("c://中文//test.txt");
if(!file.is_open())
    return FALSE;

1.在VC6.0 中结果运行正常
3.在vs .net 2005中不正确啦, is_open返回为false了
原因:
跟踪代码发现_Fiopen用的是wchar_t( 我想可能是盖子不想在WIN98下运行了,所以全部支持NT,自然就是wchar_t类型了。)
/*
这段为盖子打开文件的源代码

_MRTIMP2_NCEEPURE FILE *__CLRCALL_PURE_OR_CDECL _Fiopen(const char *filename,
ios_base::openmode mode, int prot)
{ // open wide-named file with byte name
wchar_t wc_name[FILENAME_MAX];


if (mbstowcs_s(NULL, wc_name, FILENAME_MAX, filename, FILENAME_MAX - 1) != 0)
return (0);
return _Fiopen(wc_name, mode, prot);
}
*/
另mbstowcs_s读取的时候_LocaleUpdate.localeinfo (这个与下面要讲的那个函数有关)

解决主法:
1.setlocale(LC_ALL, ""); 设置一下就OK了 //C语言的
2.std::locale::global(std::locale(""); // 标准库

原创粉丝点击