VC2005(英文版)处理文件名为中文的文件
【转载自:http://hi.baidu.com/ark803/blog/item/9d54661f4ff25866f724e470.html】
老问题了,今天才知道怎么解决,不过还不知道所以然,希望知道的能够补充上来。
在用VC2005(E文)处理文件名为中文的文件时,总是不能够打开文件,以前总是把用一个wstring类型的字符串来保存文件名,可以正常处理,但是这有个弊端,就是不能够自己输入文件名(起码用cin实现不了)。如下:
解决1:wstring fileName = L”呵呵.txt”;
fstream fin;
fin.open(fileName.c_str(),ios_base::in);
while(getline(fin,content))
cout << content << endl;
今天又遇到这个问题了,上网查了资料,发现是代码页的问题,比如你要打开当前路径下的 《呵呵.txt》文件,则需要如下写:
解决2:
string fileName;
cout << “输入文件名” << endl;
cin >> fileName;
locale loc1 = std::locale::global(std::locale(”.936″));//设置代码页为简体中文,936是简体中文的代码页。
fstream fin;
fin.open(fileName.c_str(),ios_base::in);
std::locale::global(std::locale(loc1));//恢复原来的代码页
string content;
while(getline(fin,content))
cout << content << endl;
如上就实现了在VC2005(E文)下读文件名为中文的文件操作。
得出了如下结论:
1:VC2005(E文)默认的代码页不是简体中文,应该是英文的
2:在默认情况下,只要打开文件后就可以处理文件内容为中文的文件
解决1中用wstring存放文件名,实现了打开,然后就可以读取了
解决2在设置简体中文代码页后就可以打开了,然后又恢复为默认的,就可以读取0了,但是为什么不恢复为默认代码页,在打开文件后就不能够读取了呢??
暂时想到这些了,有补充的欢迎补充。
ps:windows是以 unicode为默认编码方式的,所以对含有中文名字的文件来说,必须要wstring 来表示文件名,否则的话就找不到文件,自然打不开了。
