ini 文件操作的类
今天没有什么工作,找了些资料,写一个操作ini文件的类,已经测试过了,也算是技术积累吧!哈哈.......
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace IniFile
{
/// <summary>
///创建一个新的ini文件或读取ini文件数据
/// </summary>
public class IniFile
{
private string m_Path;
# region Windows API Functions
[DllImport("kernel32")]
public static extern long WritePrivateProfileString(string lpAppName,
string lpKeyName, string lpReturnString, string lpFilePath);
[DllImport("kernel32")]
public static extern int GetPrivateProfileString(string lpAppName,
string lpKeyName, string lpDefault, byte[] byBuffer, int size, string lpFilePath);
[DllImport("kernel32")]
public static extern int WritePrivateProfileSection(string lpAppName,
string lpString, string lpFileName);
[DllImport("kernel32")]
public static extern int GetPrivateProfileSection(string lpAppName,
string lpReturnString, string lpFilePath);
[DllImport("kernel32")]
public static extern int GetPrivateProfileInt(string lpAppName,
string lpKeyName, int iDefault, string lpFilePath);
#endregion
/// <summary>
/// ini文件构造方法
/// </summary>
/// <PARAM ></PARAM>
public IniFile(string strIniPath)
{
m_Path = strIniPath;
}
/// <summary>
/// 向ini文件中写数据
/// </summary>
/// <param >项</param>
/// <param >关键字</param>
/// <param >值</param>
/// <returns></returns>
public long SetValue(string section, string key, string value)
{
return WritePrivateProfileString(section, key, value, m_Path);
}
/// <summary>
/// 从ini文件中的项目下的关键字中读数据
/// </summary>
/// <param >项</param>
/// <param >关键字</param>
/// <returns></returns>
private string[] GetValues(string section, string key)
{
byte[] buff;
int BUFFER_SIZE = 0xff;
int iCount, iBufferSize, iMultiple = 0;
do
{
iMultiple++;
iBufferSize = BUFFER_SIZE * iMultiple;
buff = new byte[iBufferSize];
iCount = GetPrivateProfileString(section, key, "", buff, iBufferSize, m_Path);
}
while (iCount == iBufferSize - 2);
for (int i = 0; i < iCount; ++i)
{
if (buff[i] == 0 && iCount != i + 1 && buff[i + 1] != 0)
{
buff[i] = (int)'/n';
continue;
}
if (i > 0 && buff[i - 1] == 0 && buff[i] == 0) break;
}
string strResult = Encoding.Default.GetString(buff).Trim();
return strResult.Trim(new char[] { '/0' }).Split(new char[] { '/n' });
}
/// <summary>
/// 根据项和关键字读取数据值
/// </summary>
/// <param ></param>
/// <param ></param>
/// <returns></returns>
public string GetValue(string section, string key)
{
if (section == null || key == null)
{
throw new NullReferenceException("Section or Key");
}
return GetValues(section, key)[0];
}
/// <summary>
/// 根据项读取所有的关键字
/// </summary>
/// <param >项</param>
/// <returns>字符串数组</returns>
public string[] GetKeys(string section)
{
if (section == null)
{
throw new NullReferenceException("Section");
}
return GetValues(section, null);
}
/// <summary>
/// 获取ini文件中所有的项
/// </summary>
/// <returns>字符串数组</returns>
public string[] GetSections()
{
return GetValues(null, null);
}
/// <summary>
/// 设置项下关键子对应的数字
/// </summary>
/// <param >项</param>
/// <param >关键字</param>
/// <param >数字</param>
/// <returns>数字类型long</returns>
public long SetValueInt(string section, string key, int value)
{
return SetValue(section, key, value.ToString());
}
/// <summary>
/// 获取项下关键字所对应的数字值
/// </summary>
/// <param >项</param>
/// <param >关键字</param>
/// <returns>数字值</returns>
public int GetValueInt(string section, string key)
{
return GetPrivateProfileInt(section, key, -1, m_Path);
}
/// <summary>
/// 设置项下的关键字
/// </summary>
/// <param >项</param>
/// <param >关键字</param>
/// <returns>数字类型int</returns>
public int SetSection(string strSection, string strKeyValue)
{
return WritePrivateProfileSection(strSection, strKeyValue, m_Path);
}
/// <summary>
/// 删除项下的所有内容
/// </summary>
/// <param >项</param>
/// <returns></returns>
public int DeleteSection(string strSection)
{
return SetSection(strSection, null);
}
/// <summary>
/// 删除项下的关键字
/// </summary>
/// <param ></param>
/// <param ></param>
/// <returns></returns>
public long DeleteKey(string strSection, string strKey)
{
return WritePrivateProfileString(strSection, strKey, null, m_Path);
}
}
}