說實話,這個問題很早就遇到,但是一直沒有蒐集比較完備的解決方法。這次把問題和解決方法都記錄下來,以備來日查閱。
通常是因為在呼叫fstream的open方法時,系統內部呼叫mbstowcs_s進行檔名轉換,而mbstowcs_s依賴於程式的本地化設定(locale系列函式設定)。
程式啟動時預設設定為lc_all="c"。而要正確開啟中文檔名的檔案,需要設定為lc_all="chinese"。
具體可以參見
這個原因剛好和問題1相反!在預設的c locale下wofstream無法輸出中文!要輸出中文,又得將lc_all設定回來!(即lc_all="c")
看上去要解決這2個辦法,就要在開啟檔案的時候保證使用locale
"c",而在寫中文的時候保證使用locale "chinese"!
如果不想頻繁的切換,那麼最好的解決辦法是把專案設定為unicode。以下**可以順利通過測試。
[cpp]view plain
copy
?ofstream ofile("d://測試//測試.txt");
if(ofile.is_open())
else
wofstream wofile("d://測試//測試w.txt");
if(wofile.is_open())
else
ofstream ofile("d://測試//測試.txt");
if(ofile.is_open())
else
wofstream wofile("d://測試//測試w.txt");
if(wofile.is_open())
else
還有很關鍵的一點!注意這裡的locale( "", locale::all ^ locale::numeric)!
「」表示
表示使用本地語言,這裡當然相當於「chs」或者「chinese」。
locale::all表示使用該語言的所有格式設定進行編碼轉換!
^是異或,locale::numeric表示數字格式。這裡的意思是避免轉換數字格式!否則123456輸出結果會成為123,456這種形式!
更多的locale格式轉換設定可以參考
至於ansi、unicode、utf8字串之間的轉換,請參考
C 中ofstream與ifstream用法
在c 中,有乙個stream這個類,所有的i o都以這個 流 類為基礎的,包括我們要認識的檔案i o,stream這個類有兩個重要的運算子 1 插入器 向流輸出資料。比如說系統有乙個預設的標準輸出流 cout 一般情況下就是指的顯示器,所以,cout write stdout n 就表示把字串 wr...
Python裡處理檔案with open寫法的由來
使用python讀寫檔案,一開始我們用的是 f open test.txt r f.read 最後一步是呼叫close 方法關閉檔案 f.close 如果開啟報錯ioerror,那後面的close也不會執行,因此,我們可以使用try語句來容錯 try f open path to file r pr...
C 語言ofstream的使用方法
檔案讀寫 char s 50 f.read s,49 s 50 0 注意要自己加上字串結束符 char s hello f.write s,strlen s 補充 記得讀寫完成後用f.close 關閉檔案。例子 下面的程式用於刪除帶有行號的源程式中的行號。include include using ...