在C#中,处理INI文件的一个常见方式是使用自定义类来封装读写操作。下面是一个简单的INI文件读写类的实现,它支持读取和写入基本的键值对。
请注意,这个示例假设INI文件的格式相对简单,不包含节(Section)的嵌套或其他复杂结构。对于更复杂的INI文件处理,您可能需要扩展此类的功能。
``
`csharp
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
public class IniFile
{
private Dictionary
///
/// 加载INI文件
///
/// INI文件的路径
public void Load(string filePath)
{
iniData.Clear();
if (!File.Exists(filePath))
{
return;
}
string[] lines = File.ReadAllLines(filePath);
string currentSection = null;
Dictionary
foreach (var line in lines)
{
if (line.StartsWith(";") || string.IsNullOrWhiteSpace(line))
{
// 忽略注释和空行
continue;
}
if (line.StartsWith("[") && line.EndsWith("]"))
{
// 新节开始
currentSection = line.Trim('[', ']');
if (!iniData.ContainsKey(currentSection))
{
iniData[currentSection] = new Dictionary
}
currentSectionData = iniData[currentSection];
}
else
{
// 假设每行都是一个键值对
int equalIndex = line.IndexOf('=');
if (equalIndex > 0)
{
string key = line.Substring(0, equalIndex).Trim();
string value = line.Substring(equalIndex + 1).Trim();
if (currentSectionData != null && !currentSectionData.ContainsKey(key))
{
currentSectionData[key] = value;
}
}
}
}
}
///
/// 保存INI文件
///
/// INI文件的保存路径
public void Save(string filePath)
{
StringBuilder sb = new StringBuilder();
foreach (var section in iniData)
{
if (!string.IsNullOrEmpty(section.Key))
{
sb.AppendLine($"[{section.Key}]");
}
foreach (var keyValue in section.Value)
{
sb.AppendLine($"{keyValue.Key}={keyValue.Value}");
}
sb.AppendLine(); // 添加空行以便区分不同的节
}
File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
}
///
/// 读取键值
///
/// 节名称
/// 键名称
/// 默认值(如果找不到键)
///
public string Read(string section, string key, string defaultValue = null)
{
if (iniData.ContainsKey(section) && iniData[section].ContainsKey(key))
{
return iniData[section][key];
}
return defaultValue;
}
///
/// 写入键值
///
/// 节名称
/// 键名称
/// 值
public void Write(string section, string key, string value)
{
if (!iniData.ContainsKey(section))
{
iniData[section] = new Dictionary
}
iniData[section][key] = value;
}
}
// 使用示例
// IniFile ini = new IniFile();
// ini.Load("path_to_your_ini_file.ini");
// string value = ini.Read("SectionName", "KeyName", "DefaultValue");
// ini.