c#实现ini文件读写类分享
c#实现ini文件读写类分享
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下://////读写INI文件的类。///publicclassINIHelper{//读写INI文件相关。[DllImpor...

复制代码 代码如下:

/// <summary>

/// 读写INI文件的类。

/// </summary>

public class INIHelper

{

// 读写INI文件相关。

[DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString", CharSet = CharSet.Ansi)]

public static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileString", CharSet = CharSet.Ansi)]

public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileSectionNames", CharSet = CharSet.Ansi)]

public static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, int nSize, string filePath);

[DllImport("KERNEL32.DLL ", EntryPoint = "GetPrivateProfileSection", CharSet = CharSet.Ansi)]

public static extern int GetPrivateProfileSection(string lpAppName, byte[] lpReturnedString, int nSize, string filePath);

/// <summary>

/// 向INI写入数据。

/// </summary>

/// <PARAM name="Section">节点名。</PARAM>

/// <PARAM name="Key">键名。</PARAM>

/// <PARAM name="Value">值名。</PARAM>

public static void Write(string Section, string Key, string Value, string path)

{

WritePrivateProfileString(Section, Key, Value, path);

}

/// <summary>

/// 读取INI数据。

/// </summary>

/// <PARAM name="Section">节点名。</PARAM>

/// <PARAM name="Key">键名。</PARAM>

/// <PARAM name="Path">值名。</PARAM>

/// <returns>相应的值。</returns>

public static string Read(string Section, string Key, string path)

{

StringBuilder temp = new StringBuilder(255);

int i = GetPrivateProfileString(Section, Key, "", temp, 255, path);

return temp.ToString();

}

/// <summary>

/// 读取一个ini里面所有的节

/// </summary>

/// <param name="sections"></param>

/// <param name="path"></param>

/// <returns></returns>

public static int GetAllSectionNames(out string[] sections, string path)

{

int MAX_BUFFER = 32767;

IntPtr pReturnedString = Marshal.AllocCoTaskMem(MAX_BUFFER);

int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, path);

if (bytesReturned == 0)

{

sections = null;

return -1;

}

string local = Marshal.PtrToStringAnsi(pReturnedString, (int)bytesReturned).ToString();

Marshal.FreeCoTaskMem(pReturnedString);

//use of Substring below removes terminating null for split

sections = local.Substring(0, local.Length - 1).Split('');

return 0;

}

/// <summary>

/// 得到某个节点下面所有的key和value组合

/// </summary>

/// <param name="section"></param>

/// <param name="keys"></param>

/// <param name="values"></param>

/// <param name="path"></param>

/// <returns></returns>

public static int GetAllKeyValues(string section, out string[] keys, out string[] values, string path)

{

byte[] b = new byte[65535];

GetPrivateProfileSection(section, b, b.Length, path);

string s = System.Text.Encoding.Default.GetString(b);

string[] tmp = s.Split((char)0);

ArrayList result = new ArrayList();

foreach (string r in tmp)

{

if (r != string.Empty)

result.Add(r);

}

keys = new string[result.Count];

values = new string[result.Count];

for (int i = 0; i < result.Count; i++)

{

string[] item = result[i].ToString().Split(new char[] { '=' });

if (item.Length == 2)

{

keys[i] = item[0].Trim();

values[i] = item[1].Trim();

}

else if (item.Length == 1)

{

keys[i] = item[0].Trim();

values[i] = "";

}

else if (item.Length == 0)

{

keys[i] = "";

values[i] = "";

}

}

return 0;

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类