fopen打開帶中文路徑或含中文名稱的文件失敗。
解決這個問題有兩個方法:一是改用_wfopen,這個函數接受兩個寬字符類型,函數原型如下:
FILE* _wfopen(const wchar_t* filename, const wchar_t* mode);
參數一表示文件名,參數二表示打開模式,返回文件描述符
第二種方法還是用fopen,這種方式文件名稱編碼需要與系統保持一致。
fopen是C標准庫的一個函數,函數內部是系統調用。Windows中調用CreateFile;Linux中調用open。
Linux的系統編碼為UTF-8,程序中統一UTF-8編碼就可以正常打開文件,中文亂碼問題也能解決。
Windows的系統編碼為GBK,如果文件名稱是Unicode編碼,那你在調用fopen前就必須要先把文件名稱編碼轉為GBK,否則就打開失敗。
另外在調用fwrite寫入文件的時候,也要確保寫入的字符編碼和系統編碼一致,否則也會出現亂碼。