/* * 虽然微软早已经建议在WINDOWS中用注册表代替INI文件,但是在实际应用中,INI文件仍然有用武之地, * 尤其现在绿色软件的流行,越来越多的程序将自己的一些配置信息保存到了INI文件中。 * INI文件是文本文件,由若干节(section)组成,在每个带方括号的标题下面, * 是若干个关键词(key)及其对应的值(Value) * [Section] * Key=Value * VC中提供了API函数进行INI文件的读写操作,但是微软推出的C#编程语言中却没有相应的方法, * 下面我介绍一个读写INI文件的C#类 * 因为我们需要调用API函数,所以必须引用System.Runtime.InteropServices命名空间 * 该命名空间可用于访问 .NET 中的 COM 对象和本机的 API 。 * 在该类中我们使用了KERNEL32.dll中提供的两个方法,用来操作ini文件。 * 这两个方法是:WritePrivateProfileString 和 GetPrivateProfileString。 */
using System; using System.Runtime.InteropServices; using System.Text;
namespace INI { /// <summary> /// Create a New INI file to store /// or load data from a existing ini file /// </summary> public class IniFile { // the full path of the ini file private string m_iniFileFullPath;
/// <summary> /// Constructor. /// </summary> /// <PARAM name="iniFilePath">the full path of the ini file</PARAM> public IniFile(string iniFilePath) { m_iniFileFullPath = iniFilePath; }
/// <summary> /// Write data to the ini file /// </summary> /// <PARAM name="iniSection">the value of iniSection</PARAM> /// <PARAM name="iniKey">the value of iniKey</PARAM> /// <PARAM name="iniValue">the value of iniValue</PARAM> public void Write(string iniSection, string iniKey, string iniValue) { WritePrivateProfileString(iniSection, iniKey, iniValue, this.m_iniFileFullPath); }
/// <summary> /// Read data value From the Ini File /// </summary> /// <PARAM name="iniSection"></PARAM> /// <PARAM name="iniKey"></PARAM> /// <returns>the iniValue of the specified iniSection & iniKey</returns> public string Read(string iniSection, string iniKey) { StringBuilder resultValue = new StringBuilder(255); int i = GetPrivateProfileString(iniSection, iniKey, "", resultValue, 255, this.m_iniFileFullPath); return resultValue.ToString(); }
[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); } }
=================范例==================================
IniFile fileExample = new IniFile(@"C:/aaa.ini"); fileExample.Write("sectionA", "keyA", "valueA"); string aaa = fileExample.Read("sectionA", "keyA");