C#中读写INI文件的方法例子
通常c#使用基于xml的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到ini文件。
但c#本身并不具备读写ini文件的api,只有通过调用非托管代码的方式,即系统自身的api才能达到所需的目的。
对应读写的方法分别为getprivateprofilestring和writeprivateprofilestring。
getprivateprofilestring中的各参数:
lpappname —— section的名称
lpkeyname —— key的名称
lpdefault —— 如果lpkeyname没有被找到的话,则将这个值复制到lpreturnedstring中
lpreturnedstring —— 用于返回结果的值
nsize —— lpreturnedstring的字符长度
lpfilename —— ini文件名
writeprivateprofilestring中的各参数:
lpappname —— section的名称
lpkeyname —— key的名称
lpstring —— 与lpkeyname对应的值
lpfilename —— ini文件名
实际代码如下所示:
using system;
using system.runtime.interopservices;
using system.text;
namespace inidemo
{
class program
{
static void main(string[] args)
{
writeprivateprofilestring("demo", "abc", "123", "c:\\demo.ini");
stringbuilder temp = new stringbuilder();
getprivateprofilestring("demo", "abc", "", temp, 255, "c:\\demo.ini");
console.writeline(temp);
console.readline();
}
[dllimport("kernel32", charset = charset.unicode, setlasterror = true)]
private static extern bool writeprivateprofilestring(
string lpappname, string lpkeyname, string lpstring, string lpfilename);
[dllimport("kernel32", charset = charset.unicode, setlasterror = true)]
private static extern int getprivateprofilestring(
string lpappname, string lpkeyname, string lpdefault, stringbuilder lpreturnedstring,
int nsize, string lpfilename);
}
}
程序运行后ini文件中的内容为:
[demo]
abc=123
这是一种相对简单的方法,若是不想使用非托管方法,你也可以通过另一种比较麻烦的途径解决这个问题。
由于ini文件的格式是固定的,所以只要编写相应的解析程序就可以完成同样的读写功能,就是通常的字符串处理而已。
如果你不愿亲自动手的话,不要紧,已经有现成的程序——cinchoo framework,可以为你实现你想作的事情。
然后一切又变得简单了。