C#讀取ini配置檔案

weixin_34262482發表於2010-09-28

.NET Framework 類庫未提供讀寫ini檔案的相應類,不過可以使用WinAPI來處理INI檔案的讀寫,程式碼很簡單。如下:

  首先有兩個API函式需放在你的class中且只能如此,放在method或(class外namespace內),都會出現編譯錯誤:

  1 using System.Runtime.InteropServices;

  2 [DllImport("kernel32")]

  3 private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);

  4 [DllImport("kernel32")]

  5 private static extern long GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);

  WritePrivateProfileString方法說明:

  功能:將資訊寫入ini檔案

  返回值:long,如果為0則表示寫入失敗,反之成功。

  引數1(section):寫入ini檔案的某個小節名稱(不區分大小寫)。

  引數2(key):上面section下某個項的鍵名(不區分大小寫)。

  引數3(val):上面key對應的value

  引數4(filePath):ini的檔名,包括其路徑(example: "c:\config.ini")。如果沒有指定路徑,僅有檔名,系統會自動在windows目錄中查詢是否有對應的ini檔案,如果沒有則會自動在當前應用程式執行的根目錄下建立ini檔案。

  ini檔案結構Example:

  [JXCDB]    --小節名(section)

  server=192.168.1.1    --server是JXCDB下的某個鍵,192.168.1.1是server鍵的值(下同)

  name=sa

  pwd=198910

  dbName=JXC

  GetPrivateProfileString方法使用說明:

  功能:從ini檔案中讀取相應資訊

  返回值:返回所取資訊字串的位元組長度

  引數1(section):某個小節名(不區分大小寫),如果為空,則將在retVal內裝載這個ini檔案的所有小節列表。

  引數2(key):欲獲取資訊的某個鍵名(不區分大小寫),如果為空,則將在retVal內裝載指定小節下的所有鍵列表。

  引數3(def):當指定資訊,未找到時,則返回def,可以為空。

  引數4(retVal):一個字串緩衝區,所要獲取的字串將被儲存在其中,其緩衝區大小至少為size。

  引數5(size):retVal的緩衝區大小(最大字元數量)。

  引數6(filePath):指定的ini檔案路徑,如果沒有路徑,則在windows目錄下查詢,如果還是沒有則在應用程式目錄下查詢,再沒有,就只能返回def了。

  詳細使用Example:

  首先先建立一個ini檔案,並儲存資訊:

  1 WritePrivateProfileString("JXCDB", "server", ".", Application.StartupPath + "\\JXC_Server.ini");

  2 WritePrivateProfileString("JXCDB", "name", txtName.Text.Trim(), Application.StartupPath + "\\JXC_Server.ini");

  3 WritePrivateProfileString("JXCDB", "pwd",txtPwd.Text.Trim(), Application.StartupPath + "\\JXC_Server.ini");

  4 WritePrivateProfileString("JXCDB", "DBName", "JXC", Application.StartupPath + "\\JXC_Server.ini");

  說明:Application.StartupPath獲取當前專案編譯出的exe檔案的絕對路徑(不包含exe檔案的檔名)

  讀取ini檔案:

  1 StringBuilder stringBud = new StringBuilder(50);

  2 GetPrivateProfileString("JXCDB", "server", "還未設定伺服器IP", stringBud, 50, Application.StartupPath + "\\JXC_Server.ini");

  此時所讀取的server鍵對應的值已被儲存在stringBud中,只需:

  1 return stringBud.ToString();

  InI基本應用就這樣,很簡單吧。

 

      轉載於

 

相關文章