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");