一、引言
INI文件,全称为Initialization File(初始化文件),是一种传统的文本型配置文件格式,广泛应用于Windows操作系统及早期应用程序中,用于存储软件的各项设置和参数。尽管现代开发中XML、JSON或更现代的配置格式如YAML等逐渐占据主流,但INI文件凭借其简洁明了的结构和易于人类阅读与编辑的特点,在特定场景下仍然具有不可替代的价值。本文将聚焦于C#语言环境下,介绍如何以最简化的方式实现INI文件的读写操作。
二、INI文件基础
INI文件采用键值对(key-value pairs)的形式组织数据,并将其划分为若干个逻辑段落(sections)。其基本结构如下:
代码语言:javascript复制; 注释行(以分号开始)
[Section1] ; 段落名,用方括号包围
key1 = value1 ; 键值对,等号分隔键与值
key2 = value2
[Section2]
keyA = valueA
keyB = valueB
其中:
- 注释:以分号(
;
)开头的行被视为注释,用于解释文件中的设置。 - 段落(Section):用方括号(
[]
)包裹的名称标识一个特定的配置区域,用于分类相关设置。 - 键(Key):在每个段落内定义的唯一标识符,用于表示特定的配置项。
- 值(Value):与键关联的数据,可以是字符串、数字或其他简单文本表示的信息。
三、C#读写INI文件的最简方法
在C#中,虽然.NET框架并未直接提供对INI文件的内置支持,但可以通过以下两种简便途径实现INI文件的读写:
1. 使用Microsoft.VisualBasic
命名空间提供的API
尽管名为Visual Basic,但此命名空间中的类库在C#中同样可用。其中包含了对INI文件操作的便捷方法,无需额外引入外部库或编写复杂的P/Invoke代码。以下是最简示例:
代码语言:javascript复制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. 利用第三方库
若希望避免直接调用Win32 API,或者寻求更丰富的功能和更好的错误处理,可以选用成熟的第三方库,如IniFileParser
或Nini
等。这些库提供了面向对象的接口,简化了INI文件的操作。以下是一个使用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);
}
四、结语
尽管INI文件并非现代应用程序首选的配置格式,但在特定需求下,尤其是对于轻量级、跨平台要求不高的项目,其简洁性仍使其成为一个可行的选择。C#开发者可通过使用Microsoft.VisualBasic
命名空间提供的API或第三方库,以最简化的代码实现INI文件的读写操作。这两种方法均能有效满足基本的INI文件处理需求,开发者可根据项目的具体需求和偏好选择合适的方法。
参考:
【1】https://blog.csdn.net/lynnlin1122/article/details/2183142
【2】https://blog.csdn.net/qq_38693757/article/details/121675847
【3】https://www.cnblogs.com/orange1438/p/4544952.html
【4】https://blog.csdn.net/weixin_30328063/article/details/97041177