C#使用kernel32.dll讀寫INI文件的案例詳解

c#使用kernel32.dll讀寫ini文件的案例詳解

ini文件是一種常見的配置文件格式,通常用于存儲應(yīng)用程序的配置信息。在c#中,我們可以使用kernel32庫來讀寫ini文件

 

引用

//寫入
[dllimport("kernel32.dll")]
private static extern long writeprivateprofilestring(string section, string key, string val, string    filepath);
//讀取
[dllimport("kernel32.dll")]
private static extern int getprivateprofilestring(string section, string key, string def,  stringbuilder retval, int size, string inipath);

writeprivateprofilestring

向ini文件中寫入數(shù)據(jù):

  • section:ini文件中的一個段落名稱。
  • key:ini文件中的一個鍵名稱。
  • val:要寫入的值。
  • filepath:ini文件的完整路徑。

getprivateprofilestring

從ini文件中讀取數(shù)據(jù):

  • section:ini文件中的一個段落名稱。
  • key:ini文件中的一個鍵名稱。
  • def:如果沒有找到指定的鍵,則返回的默認(rèn)值。
  • retval:用于存儲讀取到的值的stringbuilder對象。
  • size:retval對象的大小。
  • inipath:ini文件的完整路徑。

 

寫入

public void iniwritevalue(string section, string key, string value)
{
 string inipath = ".config.ini";
 writeprivateprofilestring(section, key, value, inipath);
}
public void iniwritevalues() {
 iniwritevalue("config", "comport", comport);
}

 

讀取

 stringbuilder temp = new stringbuilder(500);
 getprivateprofilestring("config", "player", "", temp, 500, ".\config.ini");
 player = temp.tostring();

 

封裝示例

使用了dllimport來調(diào)用windows api函數(shù),用于讀取和寫入ini文件。雖然這段代碼可以正常工作,但是它存在一些問題:

  • 可讀性差:代碼中的參數(shù)名稱和變量名不夠清晰,難以理解。
  • 可維護(hù)性差:如果我們需要在代碼中多次使用這些函數(shù),我們需要在每個使用它們的地方都寫一遍dllimport聲明,這樣會導(dǎo)致代碼重復(fù)和維護(hù)困難。

為了解決這些問題,可以對代碼進(jìn)行重構(gòu)??梢詫llimport聲明封裝到一個類中,這樣就提高代碼的可讀性和可維護(hù)性。同時,為函數(shù)添加更具描述性的參數(shù)名稱和變量名,這樣可以使代碼更加易于理解。

重構(gòu)代碼:

class inifile
{   
  // 引入kernel32.dll庫,用于寫入ini文件
  [dllimport("kernel32.dll")]
  private static extern long writeprivateprofilestring(string section, string key, string val, string filepath);
  // 引入kernel32.dll庫,用于讀取ini文件
  [dllimport("kernel32.dll")]
  private static extern int getprivateprofilestring(string section, string key, string def, stringbuilder retval, int size, string inipath);
  // ini文件路徑
  private string _filepath;
  // 構(gòu)造函數(shù),初始化ini文件路徑
  public inifile(string filepath)
  {
      _filepath = filepath;
  }
  // 寫入ini文件
  public void writevalue(string section, string key, string value)
  {
      writeprivateprofilestring(section, key, value, _filepath);
  }
  // 寫入ini文件
  public string readvalue(string section, string key, string defaultvalue = "")
  {
      stringbuilder sb = new stringbuilder(255);
      getprivateprofilestring(section, key, defaultvalue, sb, 255, _filepath);
      return sb.tostring();
  }
}

我們將dllimport聲明封裝到了一個名為inifile的類中。這個類包含了兩個函數(shù):writevalue和readvalue,用于寫入和讀取ini文件中的值。我們還添加了一個構(gòu)造函數(shù),用于初始化ini文件的路徑。

現(xiàn)在,我們可以在代碼中使用inifile類來讀取和寫入ini文件中的值。這樣可以提高代碼的可讀性和可維護(hù)性,同時也可以避免代碼重復(fù)。

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频