c#实现ini文件读写类分享


在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> iniData = new Dictionary>();

///

/// 加载INI文件

///

/// INI文件的路径

public void Load(string filePath)

{

iniData.Clear();

if (!File.Exists(filePath))

{

return;

}

string[] lines = File.ReadAllLines(filePath);

string currentSection = null;

Dictionary currentSectionData = null;

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.