维基百科上关于ini文件的格式描述:
INI文件是一个无固定标准格式的设置档。它以简单的文字与简单的结构组成,常常使用在视窗操作系统,或是其他操作系统上,许多程序也会采用INI文件做为设置程序之用。视窗操作系统后来以注册表的形式取代掉INI档。INI文件的命名来源,是取自英文“初始(Initial)”的首字缩写,正与它的用途——初始化程序相应。有时候,INI文件也会以不同的扩展名,如“.CFG”、“.CONF”、或是“.TXT”代替。
节[编辑]
[section]
参数[编辑]
name=value
注解[编辑]
注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。
; comment text
示例[编辑]
下面是一个虚拟的程序,其INI档有两个小节,前面的小节是用来设置拥有者的信息,而后面的小节是用来设置数据库的位置。前面的注解记载谁最后编辑此文件,而后面的注解记录为何不使用域名而是使用IP地址。
; last modified 1 April 2001 by John Doe [owner] name=John Doe organization=Acme Products [database] server=192.0.2.42 ; use IP address in case network name resolution is not working port=143 file = "acme payroll.dat"
====================================================================================================================================
注意:ini文件的第一行不能是有效内容(不能为section),否则读出键值为空。
/// <summary> /// ini配置文件访问类 /// 注意:ini文件的第一行不能是有效内容(不能为section) /// </summary> public class IniFile { public string inipath; [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); /// <summary> /// 构造方法 /// </summary> /// <param name="INIPath">文件路径</param> public IniFile(string INIPath) { inipath = INIPath; } /// <summary> /// 写入INI文件 /// </summary> /// <param name="Section">项目名称(如 [TypeName] )</param> /// <param name="Key">键</param> /// <param name="Value">值</param> public void IniWriteValue(string Section, string Key, string Value) { WritePrivateProfileString(Section, Key, Value, this.inipath); } /// <summary> /// 读出INI文件 /// </summary> /// <param name="Section">项目名称(如 [TypeName] )</param> /// <param name="Key">键</param> public string IniReadValue(string Section, string Key) { StringBuilder temp = new StringBuilder(500); int i = GetPrivateProfileString(Section, Key, "", temp, 500, this.inipath); return temp.ToString(); } /// <summary> /// 获取Section下所有的Keys /// </summary> /// <param name="sectionName"></param> /// <returns></returns> public ArrayList ReadKeys(string sectionName) { byte[] buffer = new byte[5120]; int rel = GetPrivateProfileString(sectionName, null, "", buffer, buffer.GetUpperBound(0), inipath); int iCnt, iPos; ArrayList arrayList = new ArrayList(); string tmp; if (rel > 0) { iCnt = 0; iPos = 0; for (iCnt = 0; iCnt < rel; iCnt++) { if (buffer[iCnt] == 0x00) { tmp = System.Text.ASCIIEncoding.Default.GetString(buffer, iPos, iCnt - iPos).Trim(); iPos = iCnt + 1; if (tmp != "") arrayList.Add(tmp); } } } return arrayList; } /// <summary> /// 验证文件是否存在 /// </summary> /// <returns>布尔值</returns> public bool ExistINIFile() { return File.Exists(inipath); } }