.NET 雖提供 XML、JSON 等設定檔支援,但傳統 INI 檔結構簡單、相容性佳,透過 Kernel32.dll API 讀寫更直觀高效。
[DllImport("Kernel32.dll")]
public static extern bool WritePrivateProfileString(
string lpAppName, string lpKeyName, string lpString, string lpFileName);
[DllImport("Kernel32.dll")]
public static extern int GetPrivateProfileString(
string lpAppName, string lpKeyName, string lpDefault,
StringBuilder lpReturnedString, int nSize, string lpFileName);
[DllImport("Kernel32.dll")]
public static extern int GetPrivateProfileInt(
string lpAppName, string lpKeyName, int nDefault, string lpFileName);
參數說明:lpAppName 區段名、lpKeyName 鍵名、lpString 值、lpFileName 完整路徑。
WritePrivateProfileString("Settings", "Url", "https://wenti.cnblogs.com", @"c:\config.ini");
WritePrivateProfileString("Settings", "Time", "20", @"c:\config.ini");
產生內容:
[Settings]
Url=https://wenti.cnblogs.com
Time=20
StringBuilder sb = new StringBuilder(256);
GetPrivateProfileString("Settings", "Url", "https://", sb, 256, @"c:\config.ini");
string url = sb.ToString(); // "https://wenti.cnblogs.com"
GetPrivateProfileString("Settings", "Time", "10", sb, 256, @"c:\config.ini");
string time = sb.ToString(); // "20"
若區段或鍵不存在,回傳預設值(lpDefault)。
int timeInt = GetPrivateProfileInt("Settings", "Time", 10, @"c:\config.ini");
| 優點 | 缺點 |
|---|---|
| 語法簡單、無需解析邏輯 | 需 P/Invoke 呼叫非託管程式碼 |
| 跨語言相容(C++、VB 等皆可讀) | 不支援巢狀結構、資料型別有限 |
| 適合簡單設定儲存 | 大量資料讀寫效能較 XML/JSON 低 |
輕量級設定、需與舊系統共用設定檔、或偏好 INI 簡潔格式時優先考慮。