vs2005中使用使用多字节字符集,ifstream总是无法打开文件

时间:2021-12-01 20:14:17
我在vs2005中使用使用多字节字符集后,用ifstream总是无法打开文件,请问是什么原因呢,有什么好的解决方法吗?

12 个解决方案

#1


贴代码。

#2



#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{

TCHAR szBuf[100] = TEXT("D:\\123.txt");// 这里填写带中文的文件路径,则打开文件失败

ifstream file(szBuf,ios::in);
if(!file)
{
cout<<"no file"<<endl;
}
else
{
cout<<"has file"<<endl;
}

return 0;
}

#3


上面代码,是一个测试段子

#4


VC6下测试了一下你的代码,可以打开中文路径文件

#5


GetLastError看下返回值是什么?
你确定文件确实存在?

#6


文件是肯定存在的 ,同样的代码,我把字符集改成了unicode 就找到了文件

#7


与代码页有关 中文是:code_page(936)
搜搜setlocale的用法。

#8


(!file) ? 来判断???

#9


引用 8 楼 hdt 的回复:
(!file) ? 来判断???


嗯,这样有什么问题吗?

#10


还是没弄出来  vs2005中使用使用多字节字符集,ifstream总是无法打开文件

#11


VS2005和VS2008有这个问题,iostream会依赖区域设置,遇到中文路径会出错:
setlocale(LC_CTYPE, ".936")

#12


谢谢,谢谢!!
添加了setlocale(LC_CTYPE, ".936")果然就有效果了。
至于具体的原因就不太清楚了,去学习下。 vs2005中使用使用多字节字符集,ifstream总是无法打开文件

#1


贴代码。

#2



#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{

TCHAR szBuf[100] = TEXT("D:\\123.txt");// 这里填写带中文的文件路径,则打开文件失败

ifstream file(szBuf,ios::in);
if(!file)
{
cout<<"no file"<<endl;
}
else
{
cout<<"has file"<<endl;
}

return 0;
}

#3


上面代码,是一个测试段子

#4


VC6下测试了一下你的代码,可以打开中文路径文件

#5


GetLastError看下返回值是什么?
你确定文件确实存在?

#6


文件是肯定存在的 ,同样的代码,我把字符集改成了unicode 就找到了文件

#7


与代码页有关 中文是:code_page(936)
搜搜setlocale的用法。

#8


(!file) ? 来判断???

#9


引用 8 楼 hdt 的回复:
(!file) ? 来判断???


嗯,这样有什么问题吗?

#10


还是没弄出来  vs2005中使用使用多字节字符集,ifstream总是无法打开文件

#11


VS2005和VS2008有这个问题,iostream会依赖区域设置,遇到中文路径会出错:
setlocale(LC_CTYPE, ".936")

#12


谢谢,谢谢!!
添加了setlocale(LC_CTYPE, ".936")果然就有效果了。
至于具体的原因就不太清楚了,去学习下。 vs2005中使用使用多字节字符集,ifstream总是无法打开文件