C#讀寫INI文件

  INI文件在系統配置及應用程序參數保存與設置方面,具有很重要的作用,TSVN的配置文件就是使用INI存儲的,下面我們介紹下使用C#讀寫INI文件的整體思路。
封裝WindowAPI
首先,讀寫INI文件需要用到WindowsAPI中的WritePrivateProfileString與GetPrivateProfileString方法,然而怎麼在C#中調用這兩個方法呢?
C#提供了DllImportAttribute屬性,可將該屬性應用於方法,該屬性提供對從非託管 DLL 導出的函數進行調用所必需的信息。作爲最低要求,必須提供包含入口點的 DLL 的名稱。
在此,我們需要調用包含上文提到的兩個讀寫INI文件方法的DLL(kernel32),語法如下:[DllImport("kernel32")]。
然後根據API需要的參數對兩個方法進行封裝。我們將其封裝在IniAccessor類中,封裝完畢的方法爲:
1. WritePrivateProfileString
[DllImport("kernel32")]
       internal static extern long WritePrivateProfileString(string section, string key, string value, string filePath);
參數說明:


參數名稱

數據類型

說明

返回值

long

非零表示寫入成功,等於零表示寫入失敗

section

String

要在其中寫入新字串的小節名稱。這個字串不區分大小寫

key

String

要設置的項名或條目名。這個字串不區分大小寫。用null可刪除這個配置節的所有設置項

value

String

指定爲這個項寫入的字串值。用Null表示刪除這個項現有的字串

filePath

String

指定INI文件的路徑(包括文件名);如果沒有指定完整路徑名,則windows會在windows目錄查找文件。如果文件沒有找到,則函數會創建它


2. GetPrivateProfileString
[DllImport("kernel32")]
   internal static extern long GetPrivateProfileString(string section, string key, string defaultValue, StringBuilder refValue, int size, string filePath);
參數說明:


參數名稱

數據類型

說明

返回值

long

複製到lpReturnedString緩衝區的字節數量,其中不包括那些NULL中止字符。如lpReturnedString緩衝區不夠大,不能容下全部信息,就返回nSize-1(若lpApplicationName或lpKeyName爲NULL,則返回nSize-2)

section

String

欲在其中查找條目的配置節名稱。這個字串不區分大小寫。如設爲null,就在lpReturnedString緩衝區內裝載這個ini文件所有配置節的列表

key

String

欲獲取的項名或條目名。這個字串不區分大小寫。如設爲null,就在lpReturnedString緩衝區內裝載指定配置節所有項的列表

defaultValue

String

指定的條目沒有找到時,refValue的默認值,可設爲空

refValue

String

指定一個字串緩衝區,存儲獲取到的指定條目的值,長度至少爲size

size

int

指定裝載到lpReturnedString緩衝區的最大字符數量

filePath

String

指定INI文件的路徑(包括文件名);如果沒有指定完整路徑名,則windows會在windows目錄查找文件


注意:用 DllImport 屬性修飾的方法必須具有 extern 修飾符。
C#中調用並封裝爲IniFile類
1.寫入一個配置節
public bool IniWriteValue(string section, string key, string value)
    {
        if (IniAccessor.WritePrivateProfileString(section, key, value, _path) != 0)
                return true;
            else
                return false;
    }
2.讀取一個配置節
public string IniReadValue(string section, string key)
    {
        StringBuilder value = new StringBuilder(255);
        IniAccessor.GetPrivateProfileString(section, key, null, value, 255, _path);
        return value.ToString();
     }
調用實例
下面的代碼是在config文件中的miscellany配置節下,添加enable-auto-props=yes屬性。
private static void EnableAutoProps()
   {
      string filePath = @"C:\config";
      string section = "miscellany";
      string key = "enable-auto-props";

      IniFile iniFile = new IniFile(filePath);
      iniFile.IniWriteValue(section, key, "yes");
   }
其中IniFile類內封裝了讀取及寫入方法,且在初始化時,已將INI文件路徑傳入,以便後續的讀寫操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章