問題1:中文路徑問題導致文件打開失敗。 通常是因為在調用fstream的open方法時,系統內部調用mbstowcs_s進行文件名轉換,而mbstowcs_s依賴於程序的本地化設置(locale系列函數設置)。 程序啟動時默認設置為LC_ALL="C"。而要正確打開中文文件名的文件,需要設置為LC_ALL="chinese"。 問題2.無法輸出中文。 這個原因剛好和問題1相反!在默認的C locale下wofstream無法輸出中文!要輸出中文,又得將LC_ALL設置回來!(即LC_ALL="C") 看上去要解決這2個辦法,就要在打開文件的時候保證使用locale "C",而在寫中文的時候保證使用locale "chinese"! 如果不想頻繁的切換,那麼最好的解決辦法是把項目設置為UNICODE。以下代碼可以順利通過測試。 [cpp] ofstream ofile("d://測試//測試.txt"); if(ofile.is_open()) { ofile << 123456 << endl;//輸出正確 ofile << "中文1" << endl;//輸出成功 ofile << _T("中文2") << endl;//ofstream無法正確輸出此處的Unicode字符串! } else { cout<<"Open Fail!"; } wofstream wofile("d://測試//測試w.txt"); if(wofile.is_open()) { wofile.imbue(locale( "", locale::all ^ locale::numeric)); wofile << 123456 << endl;//輸出正確 wofile << "中文1" << endl;// wofstream無法正確輸出此處的ansi字符串! wofile << _T("中文2") << endl;//輸出正確 } else { cout<<"Open Fail!"; } 還有很關鍵的一點!注意這裡的locale( "", locale::all ^ locale::numeric)! “”表示表示使用本地語言,這裡當然相當於“chs”或者“chinese”。 locale::all表示使用該語言的所有格式設置進行編碼轉換! ^是異或,locale::numeric表示數字格式。這裡的意思是避免轉換數字格式!否則123456輸出結果會成為123,456這種形式!