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#中的應(yīng)用程序接口介紹及實(shí)現(xiàn),密封類與密封方法
今天小編就為大家分享一篇關(guān)于C#中的應(yīng)用程序接口介紹及實(shí)現(xiàn),密封類與密封方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10
Unity3D實(shí)現(xiàn)相機(jī)跟隨控制
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)相機(jī)跟隨控制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
C#實(shí)現(xiàn)讀取ini配置文件的內(nèi)容
INI就是擴(kuò)展名為"INI"的文件,其實(shí)他本身是個(gè)文本文件,可以用記事本打開(kāi),本文主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)讀取ini配置文件內(nèi)容的方法,需要的小伙伴可以了解下2023-12-12
UGUI ScrollRect滑動(dòng)定位優(yōu)化詳解
這篇文章主要為大家詳細(xì)介紹了UGUI ScrollRect滑動(dòng)定位優(yōu)化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
利用WPF實(shí)現(xiàn)Windows屏保的制作
屏保程序的本質(zhì)上就是一個(gè)Win32?窗口應(yīng)用程序。本文將利用WPF實(shí)現(xiàn)Windows屏保的制作,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)WPF有一定幫助,感興趣的可以了解一下2022-07-07

