C#读写INI文件

  INI文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,TSVN的配置文件就是使用INI存储的,下面我们介绍下使用C#读写INI文件的整体思路。
封装WindowAPI
首先,读写INI文件需要用到WindowsAPI中的WritePrivateProfileString与GetPrivateProfileString方法,然而怎么在C#中调用这两个方法呢?
C#提供了DllImportAttribute属性,可将该属性应用于方法,该属性提供对从非托管 DLL 导出的函数进行调用所必需的信息。作为最低要求,必须提供包含入口点的 DLL 的名称。
在此,我们需要调用包含上文提到的两个读写INI文件方法的DLL(kernel32),语法如下:[DllImport("kernel32")]。
然后根据API需要的参数对两个方法进行封装。我们将其封装在IniAccessor类中,封装完毕的方法为:
1. WritePrivateProfileString
[DllImport("kernel32")]
       internal static extern long WritePrivateProfileString(string section, string key, string value, string filePath);
参数说明:


参数名称

数据类型

说明

返回值

long

非零表示写入成功,等于零表示写入失败

section

String

要在其中写入新字串的小节名称。这个字串不区分大小写

key

String

要设置的项名或条目名。这个字串不区分大小写。用null可删除这个配置节的所有设置项

value

String

指定为这个项写入的字串值。用Null表示删除这个项现有的字串

filePath

String

指定INI文件的路径(包括文件名);如果没有指定完整路径名,则windows会在windows目录查找文件。如果文件没有找到,则函数会创建它


2. GetPrivateProfileString
[DllImport("kernel32")]
   internal static extern long GetPrivateProfileString(string section, string key, string defaultValue, StringBuilder refValue, int size, string filePath);
参数说明:


参数名称

数据类型

说明

返回值

long

复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符。如lpReturnedString缓冲区不够大,不能容下全部信息,就返回nSize-1(若lpApplicationName或lpKeyName为NULL,则返回nSize-2)

section

String

欲在其中查找条目的配置节名称。这个字串不区分大小写。如设为null,就在lpReturnedString缓冲区内装载这个ini文件所有配置节的列表

key

String

欲获取的项名或条目名。这个字串不区分大小写。如设为null,就在lpReturnedString缓冲区内装载指定配置节所有项的列表

defaultValue

String

指定的条目没有找到时,refValue的默认值,可设为空

refValue

String

指定一个字串缓冲区,存储获取到的指定条目的值,长度至少为size

size

int

指定装载到lpReturnedString缓冲区的最大字符数量

filePath

String

指定INI文件的路径(包括文件名);如果没有指定完整路径名,则windows会在windows目录查找文件


注意:用 DllImport 属性修饰的方法必须具有 extern 修饰符。
C#中调用并封装为IniFile类
1.写入一个配置节
public bool IniWriteValue(string section, string key, string value)
    {
        if (IniAccessor.WritePrivateProfileString(section, key, value, _path) != 0)
                return true;
            else
                return false;
    }
2.读取一个配置节
public string IniReadValue(string section, string key)
    {
        StringBuilder value = new StringBuilder(255);
        IniAccessor.GetPrivateProfileString(section, key, null, value, 255, _path);
        return value.ToString();
     }
调用实例
下面的代码是在config文件中的miscellany配置节下,添加enable-auto-props=yes属性。
private static void EnableAutoProps()
   {
      string filePath = @"C:\config";
      string section = "miscellany";
      string key = "enable-auto-props";

      IniFile iniFile = new IniFile(filePath);
      iniFile.IniWriteValue(section, key, "yes");
   }
其中IniFile类内封装了读取及写入方法,且在初始化时,已将INI文件路径传入,以便后续的读写操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章