Windows系统中C#读写ini配置文件的程序代码示例分享
最近接触到INI配置文件的读写,虽然很久以前微软就推荐使用注册表来代替INI配置文件,现在在VisualStudio上也有专门的.Net配置文件格式,但是看来看去还是INI配置文件顺眼。事实上.Net的XML格式配置文件在功能上更加强大,我也更推荐大家使用这种类型的配置文件来进行.Net软件的开发,我之所以使用INI配置文件,无非是想尝一下鲜和个人习惯而已。
C#本身没有提供访问INI配置文件的方法,但是我们可以使用WinAPI提供的方法来处理INI文件的读写,代码很简单!网上有大量现成的代码,这里只是作为记录和整理,方便日后使用。
INI配置文件的组成?
INI文件是文本文件,由若干节(section)组成,在每个带中括号的节名称下,是若干个关键词(key)及其对应的值(Value),这些关键词(key)属于位于关键词(key)上的节(section)。
[Section] Key1=Value1 Key2=Value2
Windows系统自带的Win32的API函数GetPrivateProfileString()和WritePrivateProfileString()分别实现了对INI文件的读写操作
所以可以写一个简单的类来读写ini文件,以满足一般应用的配置存取需求:
示例
classIniFile
{
/*
*声明API函数
*/
publicstringiniPath;
[DllImport("kernel32")]
privatestaticexternlongWritePrivateProfileString(stringsection,stringkey,stringval,stringfilePath);
[DllImport("kernel32")]
privatestaticexternintGetPrivateProfileString(stringsection,stringkey,stringdef,StringBuilderretVal,intsize,stringfilePath);
///<summary>
///构造函数
///</summary>
///<paramname="iniPath">ini文件路径,默认为当前路径下default.ini</param>
publicIniFile(stringiniPath="./default.ini")
{
this.iniPath=iniPath;
}
///<summary>
///写入ini文件
///</summary>
///<paramname="Section">Section</param>
///<paramname="Key">键</param>
///<paramname="Value">值</param>
publicvoidwriteIni(stringSection,stringKey,stringValue)
{
WritePrivateProfileString(Section,Key,Value,this.iniPath);
}
///<summary>
///写入ini文件,不管section,默认放在default里
///</summary>
///<paramname="Key">键</param>
///<paramname="Value">值</param>
publicvoidwriteIni(stringKey,stringValue)
{
WritePrivateProfileString("default",Key,Value,this.iniPath);
}
///<summary>
///读取ini文件
///</summary>
///<paramname="Section">Section</param>
///<paramname="Key">键</param>
///<returns>返回的值</returns>
publicstringreadIni(stringSection,stringKey)
{
StringBuildertemp=newStringBuilder(256);
inti=GetPrivateProfileString(Section,Key,"",temp,256,this.iniPath);
returntemp.ToString();
}
///<summary>
///读取section,不管section,默认从default里读取
///</summary>
///<paramname="Key">键</param>
///<returns>返回值</returns>
publicstringreadIni(stringKey)
{
returnreadIni("default",Key);
}
///<summary>
///查询ini文件是否存在
///</summary>
///<returns>是否存在</returns>
publicboolexistINIFile()
{
returnFile.Exists(iniPath);
}
}
调用方式:
classProgram
{
staticvoidMain(string[]args)
{
IniFileiniFile=newIniFile("./hello.ini");
iniFile.writeIni("section1","key1","value11");
iniFile.writeIni("section1","key2","value12");
iniFile.writeIni("section2","key1","value21");
iniFile.writeIni("section2","key2","value22");
iniFile.writeIni("key","value");
stringstr=iniFile.readIni("key");
Console.WriteLine(str);
Console.ReadKey();
}
}