C# 設定檔教學 (二) ini 設定檔 (支援中文)

在 C#應用程式中寫設定檔的方式有非常多種,
筆者預計會介紹 3種設定檔的撰寫方式:
2. ini 設定檔

本篇要介紹的就是第二點, ini 設定檔

優點:
1.與xml, json 相比,ini格式相對單純
2.使用數量多,目前windows上還是有一大部分程式的設定值是使用ini格式

先來介紹一下 ini的格式:

上圖中的中括號是"section",可以理解為組別
然後就是「鍵」對應到「值」(Key對應Value)
每一筆設定資料一定會有「組別、鍵、值」三個組合而成,
如果沒有第一行,第二和第三行的資訊就會因為沒有組別而無法被讀取

上面圖片設定值代表的資訊如下:
第2行的組別:"basic",鍵:"k1",值:"v1"
第3行的組別:"basic",鍵:"k2",值:"中文"
第5行的組別:"進階",鍵:"鍵",值:"值"


雖然C#本身沒有ini使用的類別,不過可以使用DllImport引入核心函式庫直接使用

寫入設定值:

[DllImport("kernel32", CharSet = CharSet.Unicode)]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

public static void WriteValueFromIniFile(string section, string key, string value, string filePath)
{
WritePrivateProfileString(section, key, value, filePath);
}
使用:
string fileName = "RuyutConsoleApp.ini";
fileName = Path.GetFullPath(fileName);
WriteValueFromIniFile("進階", "", "", fileName);
上面程式碼執行後輸出的資料:

註:這裡一定要提供完整的路徑,因為是呼叫外部函式庫(dll),所以要先將相對路徑轉換為完整路徑,如果只有提供檔名的話,他會跑到那個dll所在的資料夾下,但是因為沒有權限所以無法建立檔案和寫入資料
筆者測試時正常是不會輸出資料,如果有給予系統管理員權限,則是會跑到 C:\Windows 資料夾內

讀取設定值:

[DllImport("kernel32", CharSet = CharSet.Unicode)]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

public static string ReadValueFromIniFile(string section, string key, string def, string filePath)
{
StringBuilder temp = new StringBuilder(4096);
int i = GetPrivateProfileString(section, key, def, temp, 4096, filePath);
return temp.ToString();
}
使用:
參數依照順序為:群組、鍵、預設值、檔案路徑
string value = ReadValueFromIniFile("進階", "", "null", fileName);
Console.WriteLine(value);
輸出資料:

完整程式碼:




延伸閱讀:C# winform 程式的設定檔要儲存在哪裡?

留言