用C#讀寫ini配置文件

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():

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

參數說明:section:INI文件中的段落;key:INI文件中的關鍵字;val:INI文件中關鍵字的數值;filePath:INI文件的完整的路徑和名稱。
C#申明INI文件的讀操作函數GetPrivateProfileString():

[DllImport("kernel32")]
 
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 class INIClass
{
 
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);
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章