fstream預設不支援中文路徑和輸出整數帶逗號的解決辦法
今天專案中打日誌,發現帶中文路徑名就不能成功建立,經網上了解,發現c++的一套檔案IO庫,預設是不支援中文路徑的。
下面我們用fstream來建立一個新檔案,如果檔案路徑中帶有中文,則建立一般會失敗。如下面程式碼:
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <direct.h>
- using namespace std;
- void main()
- {
- _mkdir("測試"); //新建一箇中文資料夾
- ofstream outfile( "測試/test.txt", ios::out ); //建立檔案
- if( !outfile )
- {
- cout << "Failed to create file!";
- return ;
- }
- outfile.close();
- }
程式將輸出建立資料夾失敗的資訊。
一個解決辦法是:在中文作業系統下,呼叫locale::global(std::locale("")),將全域性區域設定為中文,如下例:
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <direct.h>
- using namespace std;
- void main()
- {
- locale::global(std::locale("")); //將全域性區域設為作業系統預設區域,以支援中文路徑
- _mkdir("測試"); //新建一箇中文資料夾
- ofstream outfile( "測試/test.txt", ios::out ); //建立檔案
- if( !outfile )
- {
- cout << "Failed to create file!";
- return ;
- }
- int i = 123456789;
- outfile << "i = " << i << "/n"; //輸出帶逗號
- outfile.close();
- setlocale( LC_ALL, "C" ); //恢復全域性locale,如果不恢復,可能導致cout無法輸出中文
- }
建立檔案成功,在程式的“測試”檔案下出現個test.txt檔案。需要注意的是最後需要呼叫setlocale( LC_ALL, "C" )還原,否則會出現未知錯誤。
此時我們發現,test.txt中的i值顯示為123,456,789,出現了逗號。這是因為中文習慣問題。我們在讀取檔案的時候,讀入i值時,可能讀入一個值為123的整數,並不是我們希望的123456789,所以我們寫檔案時,希望不要寫入逗號。一個辦法是現將整數轉換為字串再進行輸出,如:
- int i = 123456789;
- char ch[20];
- sprintf((char *)&ch, "%d", i); //整數資料轉換為字元陣列。
- outfile << "i = " << ch << '/n'; //輸出不帶逗號
上述問題的解決方法有很多,大家可以試試。
相關文章
- 逗號分隔,輸出陣列陣列
- windows XP CMD中無法輸入中文的解決辦法Windows
- LoadRunner中文出現亂碼的解決辦法
- JqueryQrcode生成二維碼不支援中文的解決辦法jQuery
- 關於網路賭博被黑不給出款的解決辦法?
- 解決opencv讀取、儲存影像時路徑包含中文和特殊符號OpenCV符號
- Linux Mint下Qt Creator無法輸入中文解決辦法LinuxQT
- 關於Android程式設計檔案路徑中含有中文字元的問題解決辦法Android程式設計字元
- 網賭被黑不給出款的解決辦法和技巧有哪些?
- 使用預設pypi源出現連線超時的解決辦法
- phpstudy自帶MySQL不支援innodb解決辦法 和 更換MySQL版本PHPMySql
- XML檔案中url路徑中&失效解決辦法XML
- 網路正常網頁打不開的解決辦法網頁
- EndNote匯入文獻出現帶有大括號{}亂碼的解決辦法
- win10預設英文輸入法開機還是中文怎麼解決Win10
- chrome上傳圖片 路徑為c:/fakepath的解決辦法Chrome
- informix設定BAR_BSALIB_PATH引數不工作的解決辦法ORM
- Win10電腦搜狗輸入法無法輸入中文及輸入法欄不見了的解決方法Win10
- 開啟網頁需要輸入賬號密碼的解決辦法網頁密碼
- c# excel讀取的日期變成整數的解決辦法C#Excel
- win10如何設定預設輸入法_win10怎麼調整預設輸入法Win10
- 解決Mysql資料庫插入資料出現問號(?)的解決辦法MySql資料庫
- boost property_tree的read_xml的第一個引數不支援中文路徑的解決方案XML
- Mac自帶中文輸入法提示條不見了的找回方法Mac
- win10 輸入法怎麼改成預設中文 win10系統設定輸入法預設為中文方法Win10
- jetty,tomcat URI傳中文引數亂碼的解決辦法JettyTomcat
- 關於python操作帶有中文檔名報錯的解決辦法Python
- 解決GAT輸入車牌號未帶出車輛品牌Bug
- LINUX 下讓Tomcat支援中文路徑名和中文檔名LinuxTomcat
- 無線網路連線不上的原因與解決辦法
- 引數為二叉樹和一個整數,求所有和為該整數的路徑二叉樹
- Springmvc中文亂碼解決辦法SpringMVC
- centos 中文亂碼解決辦法2CentOS
- man出錯解決辦法
- win10預設英文輸入法不見了怎麼辦_win10開機沒預設英文輸入法如何恢復Win10
- 總結”解決Windows XP SP2帶來的網路故障”解決辦法薦Windows
- 不可預料的壓縮檔案末端 解壓出錯的解決辦法
- 寶塔皮膚忘記賬號和密碼的解決辦法密碼