VC2005(英文版)处理文件名为中文的文件

Categories: Uncategorized
Tags:
Comments: No Comments
Published on: 2008/11/22

【转载自: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 来表示文件名,否则的话就找不到文件,自然打不开了。

No Comments - Leave a comment

Leave a comment

Your email address will not be published. Required fields are marked *


Welcome , today is Thursday, 2018/02/22