方法一
public class IniConfig
{
public static Dictionary<string, Dictionary<string, string>> IniConfigData = new Dictionary<string, Dictionary<string, string>>();
/// <summary>
/// 读取Ini文件
/// </summary>
/// <param name="filePath"></param>
public static void GetIniConfig(string filePath)
{
bool hasCfgFile = File.Exists(filePath);
if (hasCfgFile == false)
{
StreamWriter writer = new StreamWriter(File.Create(filePath), Encoding.Default);
writer.Close();
}
int index = 0;
var section = string.Empty;
var reader = new StreamReader(filePath, Encoding.Default);
string line;
while ((line = reader.ReadLine()) != null)
{
/// 读取注释
if (line.StartsWith("//") || string.IsNullOrEmpty(line))
{
IniConfigData.Add($"{index++}_{line}", null);
continue;
}
/// 读取节名
var regex = new Regex("^[+[A-Za-z0-9_-]+]$");
if (regex.IsMatch(line)) { }
if (line.StartsWith("[") && line.EndsWith("]"))
{
section = line.TrimStart("[".ToCharArray()).TrimEnd("]".ToCharArray());
if (!IniConfigData.ContainsKey(section))
{
IniConfigData.Add(section, new Dictionary<string, string>());
}
continue;
}
/// 读取配置Key=Value
var keyValue = line.Split('=');
if (keyValue.Length >= 2)
{
if (!IniConfigData.ContainsKey(section))
{
IniConfigData.Add(section, new Dictionary<string, string>());
}
if (!IniConfigData[section].ContainsKey(line))
{
IniConfigData[section].Add(keyValue[0], keyValue[1]);
}
}
}
reader.Close();
}
/// <summary>
/// 获取Key对应的值
/// </summary>
/// <param name="section">节名</param>
/// <param name="key"></param>
/// <returns></returns>
public static string GetValue(string section, string key)
{
var result = string.Empty;
if (!IniConfigData.Any())
{
return result;
}
if (!IniConfigData[section].Any())
{
return result;
}
if (!IniConfigData[section].ContainsKey(key))
{
return result;
}
result = IniConfigData[section][key];
return result;
}
/// <summary>
/// 设置Key对应的值
/// </summary>
/// <param name="section">节名</param>
/// <param name="key"></param>
/// <param name="value"></param>
public static void SetValue(string section, string key, string value)
{
if (!IniConfigData.ContainsKey(section))
{
IniConfigData.Add(section, new Dictionary<string, string>());
}
if (!IniConfigData[section].ContainsKey(key))
{
IniConfigData[section].Add(key, value);
}
else
{
IniConfigData[section][key] = value;
}
}
/// <summary>
/// 保存Ini文件
/// </summary>
/// <param name="filePath"></param>
public static void SaveConfig(string filePath)
{
var writer = new StreamWriter(filePath, false, Encoding.Default);
foreach (var section in IniConfigData.Keys)
{
if (section.Contains("_"))
{
var index = section.IndexOf("_") + 1;
writer.WriteLine(section.Substring(index, section.Length - index));
continue;
}
writer.WriteLine($"[{section}]");
foreach (var key in IniConfigData[section].Keys)
{
writer.WriteLine($"{key}={IniConfigData[section][key]}");
}
}
writer.Close();
}
}
方法二
public class IniUtil
{
[DllImport("kernel32")]//返回取得字符串缓冲区的长度
private static extern long GetPrivateProfileString(string section, string key, string noValue, StringBuilder retVal, int size, string filePath);
[DllImport("kernel32")]//返回0表示失败,非0为成功
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
/// <summary>
/// 读Ini文件
/// </summary>
public static string ReadIniData(string section, string key, string noValue, string filePath)
{
var result = string.Empty;
if (File.Exists(filePath))
{
var retVal = new StringBuilder(1024);
GetPrivateProfileString(section, key, noValue, retVal, 1024, filePath);
result = retVal.ToString();
}
return result;
}
/// <summary>
/// 写Ini文件
/// </summary>
public static bool WriteIniData(string section, string key, string value, string filePath)
{
var result = default(bool);
if (File.Exists(filePath))
{
var station = WritePrivateProfileString(section, key, value, filePath);
if (station != 0)
{
return true;
}
}
return result;
}
}