.NET程序中,可以作為配置文件使用的格式又很多,INI文件在某些場(chǎng)景應(yīng)用較為廣泛,如串口參數(shù)、一些工作站本地參數(shù)等等,INI文件主要用途為讀取指定節(jié)點(diǎn)的配置內(nèi)容,以及修改指定節(jié)點(diǎn)。一下文章主要描述在程序?qū)NI文件的操作。
INI文件介紹
INI文件
- ini文件本質(zhì)上就是一個(gè)擴(kuò)展名為ini的文本文檔,也可以當(dāng)成記事本來(lái)操作。
- 與文本文檔的區(qū)別在于,ini文件有自己的格式。
INI文件結(jié)構(gòu)
- INI文件由段落(section)、鍵(key)、值(value)組成
- section為段落名稱,也可以理解為一個(gè)分組的標(biāo)題。中括號(hào)表示。例如:[IPLIST]
- 鍵和值以key=nalue的形式表示,每個(gè)段落可以有多個(gè)鍵值對(duì);
INI文件格式示例
[section_A]
key1=value1
key2=value2
key3=value3
[section_B]
key1=value1
key2=value2
key3=value3
... ... ... ...
[IPLIST]
k1=127.0.0.1
k2=127.0.0.2
k3=127.0.0.3
;IP列表
每行開頭添加 ";"為注釋
在C#中操作INI文件
在C#命名空間中沒(méi)有專門操作INI文件的類,但在kernel32.dll中,有Win32的API函數(shù)對(duì)文件的操作
- WritePrivateProfileString():寫操作函數(shù)
- GetPrivateProfileString():讀操作函數(shù)
寫操作函數(shù)說(shuō)明
函數(shù)聲明
DllImport需引入命名空間 using System.Runtime.InteropServices;
/// <summary>
/// 修改INI文件內(nèi)容
/// </summary>
/// <param name="lpApplicationName">節(jié)點(diǎn)名稱(段落名稱)section</param>
/// <param name="lpKeyName">要設(shè)置的項(xiàng)名,Key</param>
/// <param name="lpString">要寫入的新字符串Value</param>
/// <param name="lpFileName">INI文件晚掙路徑</param>
/// <returns>0表示失敗,非零表示成功</returns>
[DllImport("kernel32")]
private static extern long WritePrivateProfileString
(string lpApplicationName,
string lpKeyName,
string lpString,
string lpFileName);
調(diào)用
/// <summary>
/// 保存ini
/// </summary>
/// <param name="section">節(jié)點(diǎn)/段落名稱</param>
/// <param name="key">項(xiàng)/Key名稱</param>
/// <param name="value">值</param>
/// <param name="filePath">ini文件路徑</param>
public static void WriteIniKeys(string section, string key, string value, string filePath)
{
WritePrivateProfileString(section, key, value, filePath);
}
/*
* 若value為null則會(huì)刪除配置文件中對(duì)應(yīng)的key
* 若key value為null則會(huì)刪除對(duì)應(yīng)的section
*/
讀操作函數(shù)說(shuō)明
函數(shù)聲明
DllImport需引入命名空間 using System.Runtime.InteropServices;
/// <summary>
/// 獲取INI中指定字符串
/// </summary>
/// <param name="lpAppName">節(jié)點(diǎn)名稱(段落名稱)section</param>
/// <param name="lpKeyName">項(xiàng)名,Key</param>
/// <param name="lpDefault">未找到指定項(xiàng)時(shí)返回的默認(rèn)值</param>
/// <param name="lpReturnedString">指定一個(gè)字符串緩沖區(qū),長(zhǎng)度至少為nSize</param>
/// <param name="nSize">指定裝載到lpReturnedString緩沖區(qū)的最大字符數(shù)量</param>
/// <param name="lpFileName">INI文件路徑</param>
/// <returns>復(fù)制到lpReturnedString中的字節(jié)數(shù)量</returns>
[DllImport("kernel32")]
private static extern int GetPrivateProfileString
(string lpAppName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString,
int nSize,
string lpFileName);
調(diào)用
/// <summary>
/// 根據(jù)section,key取值,并設(shè)置默認(rèn)值
/// </summary>
/// <param name="section">節(jié)點(diǎn)/段落名稱</param>
/// <param name="key">項(xiàng)/Key名稱</param>
/// <param name="def">默認(rèn)值</param>
/// <param name="filePath">文件路徑</param>
/// <returns>返回指定內(nèi)容,若不存在則返回默認(rèn)值def</returns>
private static string ReadIniKeys(string section, string key, string def, string filePath)
{
StringBuilder temp = new StringBuilder(1024);
GetPrivateProfileString(section, key, def, temp, 1024, filePath);
return temp.ToString();
}
以上為C#讀寫INI的實(shí)現(xiàn)方法,針對(duì)此方法編寫了幫助類,項(xiàng)目已上傳至Gitee
地址 :https://gitee.com/yang-yong-666/csharp
類文件:YYIniHelper.INIHelper.cs
個(gè)人交流QQ:1695690324
原創(chuàng)不易,轉(zhuǎn)載請(qǐng)注明出處
博客園:https://www.cnblogs.com/yangyongdashen-S/
CSDN:https://blog.csdn.net/weixin_44312699?spm=1010.2135.3001.5343
Gitee:https://gitee.com/yang-yong-666
公眾號(hào):yi人夕岸
該文章在 2023/10/7 10:19:34 編輯過(guò)