C#中讀寫INI文件的方法例子
通常C#使用基于XML的配置文件,不過(guò)如果有需要的話,比如要兼顧較老的系統(tǒng),可能還是要用到INI文件。
但C#本身并不具備讀寫INI文件的API,只有通過(guò)調(diào)用非托管代碼的方式,即系統(tǒng)自身的API才能達(dá)到所需的目的。
對(duì)應(yīng)讀寫的方法分別為GetPrivateProfileString和WritePrivateProfileString。
GetPrivateProfileString中的各參數(shù):
lpAppName —— section的名稱
lpKeyName —— key的名稱
lpDefault —— 如果lpKeyName沒(méi)有被找到的話,則將這個(gè)值復(fù)制到lpReturnedString中
lpReturnedString —— 用于返回結(jié)果的值
nSize —— lpReturnedString的字符長(zhǎng)度
lpFileName —— INI文件名
WritePrivateProfileString中的各參數(shù):
lpAppName —— section的名稱
lpKeyName —— key的名稱
lpString —— 與lpKeyName對(duì)應(yīng)的值
lpFileName —— INI文件名
實(shí)際代碼如下所示:
using System; using System.Runtime.InteropServices; using System.Text; namespace INIDemo { class Program { static void Main(string[] args) { WritePrivateProfileString("Demo", "abc", "123", "c:\\demo.ini"); StringBuilder temp = new StringBuilder(); GetPrivateProfileString("Demo", "abc", "", temp, 255, "c:\\demo.ini"); Console.WriteLine(temp); Console.ReadLine(); } [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] private static extern bool WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName); [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] private static extern int GetPrivateProfileString( string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName); } }
程序運(yùn)行后INI文件中的內(nèi)容為:
[Demo]
abc=123
這是一種相對(duì)簡(jiǎn)單的方法,若是不想使用非托管方法,你也可以通過(guò)另一種比較麻煩的途徑解決這個(gè)問(wèn)題。
實(shí)現(xiàn)代碼二、
public class Ini { // 聲明INI文件的寫操作函數(shù) WritePrivateProfileString() [System.Runtime.InteropServices.DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); // 聲明INI文件的讀操作函數(shù) GetPrivateProfileString() [System.Runtime.InteropServices.DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath); private string sPath = null; public Ini(string path) { this.sPath = path; } public void Writue(string section, string key, string value) { // section=配置節(jié),key=鍵名,value=鍵值,path=路徑 WritePrivateProfileString(section, key, value, sPath); } public string ReadValue(string section, string key) { // 每次從ini中讀取多少字節(jié) System.Text.StringBuilder temp = new System.Text.StringBuilder(255); // section=配置節(jié),key=鍵名,temp=上面,path=路徑 GetPrivateProfileString(section, key, "", temp, 255, sPath); return temp.ToString(); } }
由于INI文件的格式是固定的,所以只要編寫相應(yīng)的解析程序就可以完成同樣的讀寫功能,就是通常的字符串處理而已。
如果你不愿親自動(dòng)手的話,不要緊,已經(jīng)有現(xiàn)成的程序——Cinchoo framework,可以為你實(shí)現(xiàn)你想作的事情。
然后一切又變得簡(jiǎn)單了。
相關(guān)文章
C#實(shí)現(xiàn)MQTT服務(wù)端與客戶端通訊功能
這篇文章介紹了C#實(shí)現(xiàn)MQTT服務(wù)端與客戶端通訊的功能,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01C#中Invoke和BeginInvoke實(shí)際應(yīng)用詳解
這篇文章主要給大家介紹了關(guān)于C#中Invoke和BeginInvoke實(shí)際應(yīng)用的相關(guān)資料,Invoke是對(duì)象方法,BeginInvoke是靜態(tài)方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12