ini-parser 使用
使用
dotnet add package ini-parser
介绍
INIFileParser 通常是指一个用于解析 INI 文件格式的类或工具。INI 文件是一个配置文件格式,通常包含键值对(key-value pairs),并且可能分为多个部分(sections)。这种格式通常用于存储程序配置、设置或者一些简单的数据。
在 C# 中实现一个 INIFileParser 类,您可以使用以下方法读取和写入 INI 文件。
基本的 INI 文件示例
假设有一个如下的 INI 文件 config.ini:
makefile
复制代码
[General]
AppName=MyApp
Version=1.0.0
[Settings]
Enabled=True
MaxUsers=100
INIFileParser 类的简单实现
下面是一个简单的 C# 实现,用于解析并操作 INI 文件:
csharp
复制代码
using System;
using System.Collections.Generic;
using System.IO;
public class INIFileParser
{
private Dictionary<string, Dictionary<string, string>> _sections;
public INIFileParser(string filePath)
{
_sections = new Dictionary<string, Dictionary<string, string>>();
ParseINIFile(filePath);
}
private void ParseINIFile(string filePath)
{
string currentSection = null;
var lines = File.ReadAllLines(filePath);
foreach (var line in lines)
{
// 忽略空行和注释
if (string.IsNullOrWhiteSpace(line) || line.StartsWith(";") || line.StartsWith("#"))
continue;
// 检测 section
if (line.StartsWith("[") && line.EndsWith("]"))
{
currentSection = line.Trim('[', ']');
if (!_sections.ContainsKey(currentSection))
_sections[currentSection] = new Dictionary<string, string>();
}
else if (currentSection != null)
{
// 处理键值对
var parts = line.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
var key = parts[0].Trim();
var value = parts[1].Trim();
_sections[currentSection][key] = value;
}
}
}
}
// 获取指定 section 和 key 的值
public string GetValue(string section, string key)
{
if (_sections.ContainsKey(section) && _sections[section].ContainsKey(key))
{
return _sections[section][key];
}
return null;
}
// 设置指定 section 和 key 的值
public void SetValue(string section, string key, string value)
{
if (!_sections.ContainsKey(section))
_sections[section] = new Dictionary<string, string>();
_sections[section][key] = value;
}
// 将解析后的 INI 内容写回文件
public void Save(string filePath)
{
using (var writer = new StreamWriter(filePath))
{
foreach (var section in _sections)
{
writer.WriteLine($"[{section.Key}]");
foreach (var keyValue in section.Value)
{
writer.WriteLine($"{keyValue.Key}={keyValue.Value}");
}
writer.WriteLine();
}
}
}
}
class Program
{
static void Main(string[] args)
{
var iniFilePath = “config.ini”;
// 解析 INI 文件
var iniParser = new INIFileParser(iniFilePath);
// 获取某个值
var appName = iniParser.GetValue("General", "AppName");
Console.WriteLine($"AppName: {appName}");
// 修改某个值
iniParser.SetValue("General", "AppName", "MyNewApp");
// 保存修改后的 INI 文件
iniParser.Save(iniFilePath);
}
}
解释:
INI 文件解析:
通过 ParseINIFile 方法将 INI 文件解析为字典结构。_sections 字典使用 section 名称作为键,每个 section 下是一个键值对字典。
每行都检查是否为空、是注释或是 section。如果是 section 则切换到当前的 section,之后每个 key=value 形式的行都会被解析成键值对。
获取和设置值:
GetValue 方法根据 section 和 key 获取值。
SetValue 方法用于设置某个 section 下的某个键的值。如果 section 不存在,会自动创建。
保存到文件:
Save 方法将修改后的内容写回到 INI 文件。它遍历所有的 section 和键值对,写入文件。
扩展功能
删除键或 section:可以在 INIFileParser 类中加入方法来删除某个 section 或键。
支持更多数据类型:当前实现将所有值视为字符串,您可以扩展它,支持如布尔值、整数等不同类型的值。
使用示例:
假设您有一个 config.ini 文件:
makefile
复制代码
[General]
AppName=MyApp
Version=1.0.0
[Settings]
Enabled=True
MaxUsers=100
运行上面的程序后,您可以进行以下操作:
获取值:获取 General 部分的 AppName:
csharp
复制代码
var appName = iniParser.GetValue(“General”, “AppName”);
Console.WriteLine(appName); // 输出: MyApp
修改值:将 General 部分的 AppName 修改为 MyNewApp:
csharp
复制代码
iniParser.SetValue(“General”, “AppName”, “MyNewApp”);
保存文件:修改后的内容会保存回文件:
csharp
复制代码
iniParser.Save(“config.ini”);
总结:
INIFileParser 主要用于处理 INI 格式的配置文件。您可以将其扩展为支持更多功能,比如更复杂的配置格式或错误处理等。通过提供默认值和易于操作的方法,可以让 INI 文件成为项目的灵活配置方式。