一、前言
INI文件,全稱為Initialization File(初始化文件),是一種傳統(tǒng)的文本型配置文件格式,廣泛應(yīng)用于Windows操作系統(tǒng)及早期應(yīng)用程序中,用于存儲軟件的各項設(shè)置和參數(shù)。
盡管開發(fā)中XML、JSON或更現(xiàn)代的配置格式如YAML等逐漸占據(jù)主流,但I(xiàn)NI文件憑借其簡潔明了的結(jié)構(gòu)和易于人類閱讀與編輯的特點,在特定場景下仍然具有不可替代的價值。
本文將聚焦于C#語言環(huán)境下,介紹如何以最簡化的方式實現(xiàn)INI文件的讀寫操作。
二、INI文件基礎(chǔ)
INI文件采用鍵值對(key-value pairs)的形式組織數(shù)據(jù),并將其劃分為若干個邏輯段落(sections)。
其基本結(jié)構(gòu)如下:
; 注釋行(以分號開始)
[Section1] ; 段落名,用方括號包圍
key1 = value1 ; 鍵值對,等號分隔鍵與值
key2 = value2
[Section2]
keyA = valueA
keyB = valueB
其中:
注釋:以分號(;)開頭的行被視為注釋,用于解釋文件中的設(shè)置。
段落(Section):用方括號([])包裹的名稱標(biāo)識一個特定的配置區(qū)域,用于分類相關(guān)設(shè)置。
鍵(Key):在每個段落內(nèi)定義的唯一標(biāo)識符,用于表示特定的配置項。
值(Value):與鍵關(guān)聯(lián)的數(shù)據(jù),可以是字符串、數(shù)字或其他簡單文本表示的信息。
三、C#讀寫INI文件的最簡方法
在C#中,雖然.NET框架并未直接提供對INI文件的內(nèi)置支持,但可以通過以下兩種簡便途徑實現(xiàn)INI文件的讀寫:
1、使用Microsoft.VisualBasic命名空間提供的API
盡管名為Visual Basic,但此命名空間中的類庫在C#中同樣可用。
其中包含了對INI文件操作的便捷方法,無需額外引入外部庫或編寫復(fù)雜的P/Invoke代碼。
以下是最簡示例:
using Microsoft.VisualBasic.FileIO;
// 讀取INI文件
public string ReadIniValue(string section, string key, string filePath)
{
return IniParser.ReadKeyValue(filePath, section, key, "");
}
// 寫入INI文件
public void WriteIniValue(string section, string key, string value, string filePath)
{
IniParser.WriteKeyValue(filePath, section, key, value);
}
// 定義輔助類
internal static class IniParser
{
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
[DllImport("kernel32")]
private static extern int WritePrivateProfileString(string section, string key, string val, string filePath);
internal static string ReadKeyValue(string iniPath, string section, string key, string defaultValue)
{
const int MAX_BUFFER = 65535;
var sb = new StringBuilder(MAX_BUFFER);
GetPrivateProfileString(section, key, defaultValue, sb, MAX_BUFFER, iniPath);
return sb.ToString();
}
internal static void WriteKeyValue(string iniPath, string section, string key, string value)
{
WritePrivateProfileString(section, key, value, iniPath);
}
}
2、利用第三方庫
若希望避免直接調(diào)用Win32 API,或者尋求更豐富的功能和更好的錯誤處理,可以選用成熟的第三方庫,如IniFileParser或Nini等。
這些庫提供了面向?qū)ο蟮慕涌冢喕薎NI文件的操作。
以下是一個使用IniFileParser庫的簡例:
using IniParser;
using IniParser.Model;
// 讀取INI文件
public string ReadIniValue(string section, string key, string filePath)
{
var parser = new FileIniDataParser();
IniData data = parser.ReadFile(filePath);
return data[section][key];
}
// 寫入INI文件
public void WriteIniValue(string section, string key, string value, string filePath)
{
var parser = new FileIniDataParser();
IniData data = parser.ReadFile(filePath);
data[section][key] = value;
parser.WriteFile(filePath, data);
}
四、結(jié)語
盡管INI文件并非現(xiàn)代應(yīng)用程序首選的配置格式,但在特定需求下,尤其是對于輕量級、跨平臺要求不高的項目,其簡潔性仍使其成為一個可行的選擇。
C#開發(fā)可通過使用Microsoft.VisualBasic命名空間提供的API或第三方庫,以最簡化的代碼實現(xiàn)INI文件的讀寫操作。
這兩種方法均能有效滿足基本的INI文件處理需求,可根據(jù)項目的具體需求和偏好選擇合適的方法。
作者:DotNet開發(fā)跳槽
出處:mp.weixin.qq.com/s/NLt-C3wtPT2HFc39mlbQVA
該文章在 2025/5/23 12:02:31 編輯過