C#讀寫INI文件 .NET程式中,可以作為配置文件使用的格式又很多,INI文件在某些場景應用較為廣泛,如串口參數、一些工作站本地參數等等,INI文件主要用途為讀取指定節點的配置內容,以及修改指定節點。一下文章主要描述在程式對INI文件的操作。 INI文件介紹 INI文件 ini文件本質上就是一個擴 ...
C#讀寫INI文件
.NET程式中,可以作為配置文件使用的格式又很多,INI文件在某些場景應用較為廣泛,如串口參數、一些工作站本地參數等等,INI文件主要用途為讀取指定節點的配置內容,以及修改指定節點。一下文章主要描述在程式對INI文件的操作。
INI文件介紹
INI文件
- ini文件本質上就是一個擴展名為ini的文本文檔,也可以當成記事本來操作。
- 與文本文檔的區別在於,ini文件有自己的格式。
INI文件結構
- INI文件由段落(section)、鍵(key)、值(value)組成
- section為段落名稱,也可以理解為一個分組的標題。中括弧表示。例如:[IPLIST]
- 鍵和值以key=nalue的形式表示,每個段落可以有多個鍵值對;
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#命名空間中沒有專門操作INI文件的類,但在kernel32.dll中,有Win32的API函數對文件的操作
- WritePrivateProfileString():寫操作函數
- GetPrivateProfileString():讀操作函數
寫操作函數說明
函數聲明
DllImport需引入命名空間 using System.Runtime.InteropServices;
/// <summary>
/// 修改INI文件內容
/// </summary>
/// <param name="lpApplicationName">節點名稱(段落名稱)section</param>
/// <param name="lpKeyName">要設置的項名,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);
調用
/// <summary>
/// 保存ini
/// </summary>
/// <param name="section">節點/段落名稱</param>
/// <param name="key">項/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則會刪除配置文件中對應的key
* 若key value為null則會刪除對應的section
*/
讀操作函數說明
函數聲明
DllImport需引入命名空間 using System.Runtime.InteropServices;
/// <summary>
/// 獲取INI中指定字元串
/// </summary>
/// <param name="lpAppName">節點名稱(段落名稱)section</param>
/// <param name="lpKeyName">項名,Key</param>
/// <param name="lpDefault">未找到指定項時返回的預設值</param>
/// <param name="lpReturnedString">指定一個字元串緩衝區,長度至少為nSize</param>
/// <param name="nSize">指定裝載到lpReturnedString緩衝區的最大字元數量</param>
/// <param name="lpFileName">INI文件路徑</param>
/// <returns>複製到lpReturnedString中的位元組數量</returns>
[DllImport("kernel32")]
private static extern int GetPrivateProfileString
(string lpAppName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString,
int nSize,
string lpFileName);
調用
/// <summary>
/// 根據section,key取值,並設置預設值
/// </summary>
/// <param name="section">節點/段落名稱</param>
/// <param name="key">項/Key名稱</param>
/// <param name="def">預設值</param>
/// <param name="filePath">文件路徑</param>
/// <returns>返回指定內容,若不存在則返回預設值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的實現方法,針對此方法編寫了幫助類,項目已上傳至Gitee
地址 :https://gitee.com/yang-yong-666/csharp
類文件:YYIniHelper.INIHelper.cs
個人交流QQ:1695690324
原創不易,轉載請註明出處
博客園: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
公眾號:yi人夕岸