通常C#使用基於XML的設定檔,不過如果有需要的話,比如要兼顧較老的系統,可能還是要用到INI檔案。
但C#本身並不具備讀寫INI檔案的API,只有通過調用Unmanaged 程式碼的方式,即系統自身的API才能達到所需的目的。
對應讀寫的方法分別為GetPrivateProfileString和WritePrivateProfileString。
GetPrivateProfileString中的各參數:
lpAppName —— section的名稱
lpKeyName —— key的名稱
lpDefault —— 如果lpKeyName沒有被找到的話,則將這個值複製到lpReturnedString中
lpReturnedString —— 用於返回結果的值
nSize —— lpReturnedString的字元長度
lpFileName —— INI檔案名稱
WritePrivateProfileString中的各參數:
lpAppName —— section的名稱
lpKeyName —— key的名稱
lpString —— 與lpKeyName對應的值
lpFileName —— INI檔案名稱
實際代碼如下所示:
複製代碼 代碼如下:using System;
using System.Runtime.InteropServices;
using System.Text;
namespace INIDemo
{
class Program
{
static void Main(string[] args)
{
WritePrivateProfileString("Demo", "abc", "123", "c:\\demo.ini");
StringBuilder temp = new StringBuilder();
GetPrivateProfileString("Demo", "abc", "", temp, 255, "c:\\demo.ini");
Console.WriteLine(temp);
Console.ReadLine();
}
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern bool WritePrivateProfileString(
string lpAppName, string lpKeyName, string lpString, string lpFileName);
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern int GetPrivateProfileString(
string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString,
int nSize, string lpFileName);
}
}
程式運行後INI檔案中的內容為:
複製代碼 代碼如下:[Demo]
abc=123
這是一種相對簡單的方法,若是不想使用非託管方法,你也可以通過另一種比較麻煩的途徑解決這個問題。
由於INI檔案的格式是固定的,所以只要編寫相應的解析程式就可以完成同樣的讀寫功能,就是通常的字串處理而已。
如果你不願親自動手的話,不要緊,已經有現成的程式——Cinchoo framework,可以為你實現你想作的事情。
然後一切又變得簡單了。