公司有一個項目從vs2003移植到vs2005之后老是出現runtim erro
經過排查最終定位在fstream 打開"含中文路徑"的文件時候會出現fail的情況
本來不相信vs2003過渡到2005會有這個問題,但是經過試驗確證實了該問題
我新建立一個exe來測試該問題
?1
#include?"stdafx.h"
?2
#include?"testiostream.h"
?3
#include?<string>
?4
#include?<fstream>
?5
?6
?7
BEGIN_MESSAGE_MAP(CtestiostreamApp,?CWinApp)
?8
END_MESSAGE_MAP()
?9
10
CtestiostreamApp::CtestiostreamApp()
11

{
12
}
13
14
CtestiostreamApp?theApp;
15
16
BOOL?CtestiostreamApp::InitInstance()
17

{
18
????CWinApp::InitInstance();
19
????std::ifstream?iput;
20
????iput.open("F:\\中文.txt");
21
????ASSERT(!iput.fail());
22
????return?FALSE;
23
} vs2003不需要作任何設置就可以就可以成功
但是vs2005下每次都會失敗在斷言處,查找了一些網上資料,例如
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=371229&SiteID=1發現但凡是uinicode的路徑都是有該問題的.
解決方法有2個
1.第一個使用vs2005默認的unicode set并在所有字符串外面面加上_T() 或者_TEXT宏,代價是原來所有不符合unicode規范的地方你都必須得改.
2.使用not set 或者"mutibyte set" 并在程序初始化的時候調用setlocale()如下
BOOL?CtestiostreamApp::InitInstance()


{
?????setlocale(LC_ALL,"Chinese-simplified");
????CWinApp::InitInstance();
????std::ifstream?iput;
????iput.open("F:\\中文.txt");
????ASSERT(!iput.fail());
????return?FALSE;
}就可以解決該問題
上述引用的ms論壇連接基本講清楚了該問題,但是由于我前幾日搜索中文相關信息時候,實在未發現有用之內容,故記錄下來,希望有相同問題又不思其解的朋友可以少花點時間.