2023-12-05 更新,添加读取Section节点下的数据
2019-08-27 更新 添加删除功能

核心代码如下
[DllImport("kernel32")]
private static extern long GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filepath);
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
/// <summary>
/// 读配置文件
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <param name="def"></param>
/// <param name="size"></param>
/// <param name="filepath"></param>
/// <returns></returns>
public static String ReadIni(string section, string key, string def, int size, string filepath)
{
StringBuilder sb = new StringBuilder();
long l = GetPrivateProfileString(section, key, def, sb, size, filepath);
return sb.ToString();
}
/// <summary>
/// 写入数据到配置文件
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <param name="val"></param>
/// <param name="filepath"></param>
/// <returns></returns>
public static long WriteIni(string section, string key, string val, string filepath)
{
return WritePrivateProfileString(section, key, val, filepath);
}
// 删除ini文件下所有段落
public void ClearAllSection(string filepath)
{
WriteIni(null, null, null, filepath);
}
//删除ini文件下personal段落下的所有键
public void ClearSection(string Section, string filepath)
{
WriteIni(Section, null, null, filepath);
}
/// <summary>
/// 获取某个指定节点(Section)中所有KEY和Value
/// </summary>
/// <param name="lpAppName">节点名称</param>
/// <param name="lpReturnedString">返回值的内存地址,每个之间用\0分隔</param>
/// <param name="nSize">内存大小(characters)</param>
/// <param name="lpFileName">Ini文件</param>
/// <returns>内容的实际长度,为0表示没有内容,为nSize-2表示内存大小不够</returns>
[DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern uint GetPrivateProfileSection(string lpAppName, IntPtr lpReturnedString, uint nSize, string lpFileName);
/// <summary>
/// 获取INI文件指定Section节点下的数据,并返回 Dictionary 对象
/// </summary>
/// <param name="iniFile">ini文件路径</param>
/// <param name="section">section节点</param>
/// <returns></returns>
public static Dictionary<string, string> GetSectionDic(string iniFile, string section)
{
uint MAX_BUFFER = 32767;
string[] items = null;
//分配内存
IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char));
uint bytesReturned = GetPrivateProfileSection(section, pReturnedString, MAX_BUFFER, iniFile);
if (!(bytesReturned == MAX_BUFFER - 2) || (bytesReturned == 0))
{
string returnedString = Marshal.PtrToStringAuto(pReturnedString, (int)bytesReturned);
items = returnedString.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
}
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(pReturnedString); //释放内存
//无结果返回空
if (items == null)
{
return null;
}
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (string item in items)
{
if (!item.Contains("="))
{
continue;
}
string[] part = item.Split('=');
dic.Add(part[0], part[1]);
}
return dic;
}
//转载请保留原创地址http://www.luofenming.com/show.aspx?id=ART2018032800001以下是方法调用
//读取配置文件 如果没有则 192.168.1.2 为默认值
readIni("IPSet", "IP", "192.168.1.2", 255, @"d:\config.ini");
//写入config.ini
writeIni("IPSet", "IP", "192.168.1.2", @"d:\config.ini");