剖析ifstream打开含中文路径名文件失败的原因

/*有一段英文文档(只由字母和空格组成),请实现一个函数,把这篇文档中指定的单词替换为目标单词。*/ #include <iostream> #include <fstream> #include <vector> #include <string> #include <algorithm> using namespace std; bool replaceWord(const string& strFilePath, const string& strOldWord, const string& strNewWord) { // 将文件打开,并将单词放到vector ifstream infile; infile.open(strFilePath.c_str(), ios::in); if (!infile.is_open()) { return false; } vector<string> vWords; istream_iterator<string> ifile(infile); istream_iterator<string> eos; copy(ifile, eos, inserter(vWords, vWords.begin())); for (vector<string>::iterator it = vWords.begin(); it != vWords.end(); ++it) { cout<<*it<<endl; } // 替换单词 replace(vWords.begin(), vWords.end(), strOldWord, strNewWord); // 保存 ofstream outfile(strFilePath.c_str(), ios_base::out | ios_base::trunc); if (!outfile.is_open()) { return false; } for (vector<string>::iterator iter = vWords.begin(); iter != vWords.end(); ++iter) { outfile << *iter << " "; } outfile.close(); return true; } int main() { if (replaceWord("D://liuan.txt", "new", "cert")) { cout<<"转换成功!"; } else { cout<<"不能转换成功!"; } /*ifstream infile; infile.open("D://liuan.txt", ios::in); string str; while (!infile.eof()) { infile>>str; cout<<str; }*/ return 0; }

 

以上代码在VC6.0上面能正确的实现替换单词的功能, 但是在VS2008上面不行, 即使路径不含中文也是这样的。

 

解决方案如下:

一、把项目属性字节改为多字节。

二、locale::global(locale(""));//将全局区域设为操作系统默认区域这样就行了。

你可能感兴趣的:(ios,String,iterator,文档)