項目中用到 GetPrivateProfileString可是使用中, 發現 沒法讀出 ini 配置中的值,函數
好比Enable_log =3 我讀到的是 API設置的默認值.測試
網上說可能時字符集編碼的問題.ui
https://blog.csdn.net/Yl12fh/article/details/80495092 編碼格式的問題,有多是系統語言默認字符集的問題,也有多是項目編碼的問題,文件的問題 經排查,形成的緣由是INI文件是用ANSI/utf8等格式保存的,將文件另存爲Unicode編碼格式,問題解決
實際上,用utf8 仍是會出現問題,編碼
用Endoing.Default(Endoing.ASCII )就OK, 可是不支持中文..net
確認下項目 編碼code
// 聲明INI文件的寫操做函數 WritePrivateProfileString() [System.Runtime.InteropServices.DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); // 聲明INI文件的讀操做函數 GetPrivateProfileString() [System.Runtime.InteropServices.DllImport("kernel32")] //private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath); private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath); //建立文件 FileInfo fi = new FileInfo(_IniPath); if (!fi.Exists) { var outputStream = File.Create(_IniPath);//OK 覆蓋寫 //讀寫異常bug 20190418 //INI文件是用ANSI/utf8等格式保存的,將文件另存爲Unicode編碼格式, //建立ini文件 string編碼格式, 讀取ini string 編碼 要相同. //default (ASCII)問題解決!!! //UTF8失敗, ASCII 不支持中文,半角 using (var writer = new StreamWriter(outputStream, Encoding.ASCII)) { writer.AutoFlush = false; writer.Write("[App]" + "\r\n"); writer.Write("Version=" + _Version + "\r\n"); writer.Write("Enable_Log=0" + "\r\n"); //writer.Write("#WorkMode 1:單次, 2:批量" + "\r\n"); writer.Write("WorkMode=2" + "\r\n");//1:單次, 2:批量 else unknow writer.Flush(); writer.Close(); writer.Dispose(); } outputStream.Dispose();//須要釋放,不然,其餘程序沒法讀寫 若不想讓其餘人改動,就不用處理,最後進程析構 } //修改文件 //read ini //讀取INI文件指定 public static string INI_ReadString(string INI_Path, string section, string key, string Default) { Byte[] Buffer = new Byte[128];//512 65535 //int bufLen = GetPrivateProfileString(section, key, Default, Buffer, Buffer.GetUpperBound(0), INI_Path); int bufLen = GetPrivateProfileString(section, key, Default, Buffer, 128, INI_Path); //設定 Unicode,UTF8 的編碼方式,不然沒法支持中文 , 仍是有bug // 1.刪除文件 2. 自動建立文件後 或 修改後 //只能支持ASCII(default) string s = Encoding.GetEncoding(Encoding.ASCII.CodePage).GetString(Buffer,0, bufLen); // s = s.Substring(0, bufLen); //s.Replace('\0', ' '); return s.Trim(); }