可以将以下给的INI类中的代码合并到自己的INI类中去
class INI
{
/// <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>
[System.Runtime.InteropServices.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 = System.Runtime.InteropServices.Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char));
uint bytesReturned = GetPrivateProfileSection(section, pReturnedString, MAX_BUFFER, iniFile);
if (!(bytesReturned == MAX_BUFFER - 2) || (bytesReturned == 0))
{
string returnedString = System.Runtime.InteropServices.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;
}
}