INI就是擴展名爲"INI"的文件,其實他本身是個文本文件,可以用記事本打工,主要存放的是用戶所做的選擇或系統的各種參數.
INI文件其實並不是普通的文本文件.它有自己的結構.由若干段落(SECTION)組成,在每個帶括號的標題下面,是若干個以單個單詞開頭的關鍵字(KEYWORD)和一個等號,等號右邊就是關鍵字的值(VALUE).例如:
[Section1]
KeyWord1 = Value1
KeyWord2 = Value2
...
[Section2]
KeyWord3 = Value3
KeyWord4 = Value4
C#命名空間中沒有直接讀寫INI的類,當然如果你把INT當成文本文件用System.IO類來讀寫算我沒說.
我現在介紹的是系統處理INI的方法.
雖然C#中沒有,但是在"kernel32.dll"這個文件中有Win32的API函數--WritePrivateProfileString()和GetPrivateProfileString()
C#聲明INI文件的寫操作函數WritePrivateProfileString():
private static extern long WritePrivateProfileString ( string section ,string key , string val
, string filePath ) ;
參數說明:section:INI文件中的段落;key:INI文件中的關鍵字;val:INI文件中關鍵字的數值;filePath:INI文件的完整的路徑和名稱。
C#申明INI文件的讀操作函數GetPrivateProfileString():
private static extern int GetPrivateProfileString ( string section ,
string key , string def , StringBuilder retVal ,
int size , string filePath ) ;
參數說明:section:INI文件中的段落名稱;key:INI文件中的關鍵字;def:無法讀取時候時候的缺省數值;retVal:讀取數值;size:數值的大小;filePath:INI文件的完整路徑和名稱。
下面是一個讀寫INI文件的類:
{
public string inipath;
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
/// <summary>
/// 構造方法
/// </summary>
/// <param name="INIPath">文件路徑</param>
public INIClass(string INIPath)
{
inipath = INIPath;
}
/// <summary>
/// 寫入INI文件
/// </summary>
/// <param name="Section">項目名稱(如 [TypeName] )</param>
/// <param name="Key">鍵</param>
/// <param name="Value">值</param>
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.inipath);
}
/// <summary>
/// 讀出INI文件
/// </summary>
/// <param name="Section">項目名稱(如 [TypeName] )</param>
/// <param name="Key">鍵</param>
public string IniReadValue(string Section,string Key)
{
StringBuilder temp = new StringBuilder(500);
int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath);
return temp.ToString();
}
/// <summary>
/// 驗證文件是否存在
/// </summary>
/// <returns>布爾值</returns>
public bool ExistINIFile()
{
return File.Exists(inipath);
}
}