在 C#應用程式中寫設定檔的方式有非常多種,
筆者預計會介紹 3種設定檔的撰寫方式:
2. ini 設定檔
3. Json 設定檔
本篇要介紹的就是第二點, ini 設定檔
優點:
1.與xml, json 相比,ini格式相對單純
2.使用數量多,目前windows上還是有一大部分程式的設定值是使用ini格式
先來介紹一下 ini的格式:
然後就是「鍵」對應到「值」(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 程式的設定檔要儲存在哪裡?
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com