C#使用kernel32.dll讀寫INI文件的案例詳解
c#使用kernel32.dll讀寫ini文件的案例詳解
ini文件是一種常見的配置文件格式,通常用于存儲應用程序的配置信息。在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文件中寫入數據:
- section:ini文件中的一個段落名稱。
- key:ini文件中的一個鍵名稱。
- val:要寫入的值。
- filepath:ini文件的完整路徑。
getprivateprofilestring
從ini文件中讀取數據:
- section:ini文件中的一個段落名稱。
- key:ini文件中的一個鍵名稱。
- def:如果沒有找到指定的鍵,則返回的默認值。
- 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來調用windows api函數,用于讀取和寫入ini文件。雖然這段代碼可以正常工作,但是它存在一些問題:
- 可讀性差:代碼中的參數名稱和變量名不夠清晰,難以理解。
- 可維護性差:如果我們需要在代碼中多次使用這些函數,我們需要在每個使用它們的地方都寫一遍dllimport聲明,這樣會導致代碼重復和維護困難。
為了解決這些問題,可以對代碼進行重構。可以將dllimport聲明封裝到一個類中,這樣就提高代碼的可讀性和可維護性。同時,為函數添加更具描述性的參數名稱和變量名,這樣可以使代碼更加易于理解。
重構代碼:
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; // 構造函數,初始化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的類中。這個類包含了兩個函數:writevalue和readvalue,用于寫入和讀取ini文件中的值。我們還添加了一個構造函數,用于初始化ini文件的路徑。
現在,我們可以在代碼中使用inifile類來讀取和寫入ini文件中的值。這樣可以提高代碼的可讀性和可維護性,同時也可以避免代碼重復。