C#-INI文件基础操作类
首先添加引用:
using System.Runtime.InteropServices;
声明外部实现方法:
[DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string defVal, byte[] retVal, int size, string filePath);
构造函数:
string path; public INI(string path) { this.path = path; }
写入键值:
/// <summary> /// 写入键值 /// </summary> public void IniWriteValue(string section, string key, string value) { WritePrivateProfileString(section, key, value, path); }
读取到字节数组:
/// <summary> /// 读取ini文件,返回byte[] /// </summary> private byte[] IniReadValues(string section, string key) { byte[] bs = new byte[2048]; int i = GetPrivateProfileString(section, key, "", bs, 2048, path); return bs; } /// <summary> /// byte[] to string[] /// </summary> private string[] ByteToString(byte[] sectionByte) { ASCIIEncoding ascii = new ASCIIEncoding(); string sections = ascii.GetString(sectionByte); string[] sectionList = sections.Split(new char[1] { '\0' }); return sectionList; }
读取所有段落,所有键,键值:
/// <summary> /// 读取ini文件的所有段落名 /// </summary> public string[] IniReadValues() { byte[] allSection = IniReadValues(null, null); return ByteToString(allSection); } /// <summary> /// 读取ini文件的某段落下的所有键名 /// </summary> public string[] IniReadValues(string section) { byte[] sectionByte = IniReadValues(section, null); return ByteToString(sectionByte); } /// <summary> /// 读取键值,返回字符串 /// </summary> public string IniReadValue(string section, string key) { StringBuilder sb = new StringBuilder(255); int i = GetPrivateProfileString(section, key, "", sb, 255, path); return sb.ToString(); }
删除所有段落,指定段落,指定键:
/// <summary> /// 删除所有段落 /// </summary> public void ClearAllSection() { IniWriteValue(null, null, null); } /// <summary> /// 删除文件下指定段落 /// </summary> public void ClearSection(string section) { IniWriteValue(section, null, null); } /// <summary> /// 删除文件下段落下指定键 /// </summary> public void ClearSection(string section,string key) { IniWriteValue(section, key, null); }
重命名段落或键:
/// <summary> /// 重命名段落 /// </summary> /// <param name="section"></param> /// <param name="newName"></param> /// <returns></returns> public bool ReNameSection(string section, string newName) { string[] keys = IniReadValues(section); foreach (string key in keys) { if (key == null || key == "") break; string value = IniReadValue(section, key); IniWriteValue(newName, key, value); } ClearSection(section); return true; } /// <summary> /// 重命名键 /// </summary> /// <param name="section"></param> /// <param name="key"></param> /// <param name="newName"></param> /// <returns></returns> public bool ReNameSection(string section, string key, string newName) { string value = IniReadValue(section, key); IniWriteValue(section, newName, value); ClearSection(section, key); return true; }
判断段落或键是否存在:
/// <summary> /// 判断段落或键是否存在 /// </summary> /// <param name="section"></param> /// <param name="key"></param> /// <returns></returns> public bool IsExist(string section, string key = "") { if (key == "") { string[] list = IniReadValues(); foreach (string l in list) { if (l == section) return true; } } else { string[] list = IniReadValues(section); foreach (string l in list) { if (l == key) return true; } } return false; }