C#本身没有对INI格式文件的操作类,可以自定义一个IniFile类进行INI文件读写。
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; namespace MSFramework.Common { /// <summary> /// ini文件类 /// </summary> public class IniFile { private string m_FileName; public string FileName { get { return m_FileName; } set { m_FileName = value; } } [DllImport("kernel32.dll")] private static extern int GetPrivateProfileInt( string lpAppName, string lpKeyName, int nDefault, string lpFileName ); [DllImport("kernel32.dll")] private static extern int GetPrivateProfileString( string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName ); [DllImport("kernel32.dll")] private static extern int WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName ); /// <summary> /// 构造函数 /// </summary> /// <param name="aFileName">Ini文件路径</param> public IniFile(string aFileName) { this.m_FileName = aFileName; } /// <summary> /// 构造函数 /// </summary> public IniFile() { } /// <summary> /// [扩展]读Int数值 /// </summary> /// <param name="section">节</param> /// <param name="name">键</param> /// <param name="def">默认值</param> /// <returns></returns> public int ReadInt(string section, string name, int def) { return GetPrivateProfileInt(section, name, def, this.m_FileName); } /// <summary> /// [扩展]读取string字符串 /// </summary> /// <param name="section">节</param> /// <param name="name">键</param> /// <param name="def">默认值</param> /// <returns></returns> public string ReadString(string section, string name, string def) { StringBuilder vRetSb = new StringBuilder(2048); GetPrivateProfileString(section, name, def, vRetSb, 2048, this.m_FileName); return vRetSb.ToString(); } /// <summary> /// [扩展]写入Int数值,如果不存在 节-键,则会自动创建 /// </summary> /// <param name="section">节</param> /// <param name="name">键</param> /// <param name="Ival">写入值</param> public void WriteInt(string section, string name, int Ival) { WritePrivateProfileString(section, name, Ival.ToString(), this.m_FileName); } /// <summary> /// [扩展]写入String字符串,如果不存在 节-键,则会自动创建 /// </summary> /// <param name="section">节</param> /// <param name="name">键</param> /// <param name="strVal">写入值</param> public void WriteString(string section, string name, string strVal) { WritePrivateProfileString(section, name, strVal, this.m_FileName); } /// <summary> /// 删除指定的 节 /// </summary> /// <param name="section"></param> public void DeleteSection(string section) { WritePrivateProfileString(section, null, null, this.m_FileName); } /// <summary> /// 删除全部 节 /// </summary> public void DeleteAllSection() { WritePrivateProfileString(null, null, null, this.m_FileName); } /// <summary> /// 读取指定 节-键 的值 /// </summary> /// <param name="section"></param> /// <param name="name"></param> /// <returns></returns> public string IniReadValue(string section, string name) { StringBuilder strSb = new StringBuilder(256); GetPrivateProfileString(section, name, "", strSb, 256, this.m_FileName); return strSb.ToString(); } /// <summary> /// 写入指定值,如果不存在 节-键,则会自动创建 /// </summary> /// <param name="section"></param> /// <param name="name"></param> /// <param name="value"></param> public void IniWriteValue(string section, string name, string value) { WritePrivateProfileString(section, name, value, this.m_FileName); } } }
应用:
有原始INI文件:
执行代码:
IniFile myIni = new IniFile(Environment.CurrentDirectory + "\Config.ini"); myIni.WriteInt("Tsection", "tName", 89); Console.WriteLine(myIni.ReadString("System", "MainFormName", "")); Console.WriteLine(myIni.ReadString("DbServer", "DbFile", "")); myIni.WriteString("DbServer", "DbFile", @"E:Work est2.db"); Console.WriteLine(myIni.ReadString("DbServer", "DbServer", "")); Console.WriteLine(myIni.ReadString("DbServer", "DbFile", ""));
执行结果:
http://www.cnblogs.com/CUIT-DX037/