Files
2024-09-22 22:21:11 +08:00

3.8 KiB
Raw Permalink Blame History

Ini文件读写类


  • IniFile Ini文件读写类,基类为IniBase,已经处理过中文读写。 建议读写的ini文件为IniFile存储的文件。以免造成文件编码不统一。

  • Ini文件格式 程序没有任何配置文件,那么它对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,为了让程序出厂后还能根据需要进行必要的配置,所以要用配置文件;配置文件有很多种,如INI配置文件,XML配置文件,cfg配置文件,还有就是可以使用系统注册表等。
    INI ”就是英文 “initialization”的头三个字母的缩写;当然INI file的后缀名也不一定是".ini"也可以是".cfg",".conf ”或者是".txt"。
    INI文件的格式很简单,最基本的三个要素是:parameters,sections和comments。

    什么是parameters?
    INI所包含的最基本的“元素”就是parameter;每一个parameter都有一个name和一个value,如下所示:
    name = value

    什么是sections?
    所有的parameters都是以sections为单位结合在一起的。所有的section名称都是独占一行,并且sections名字都被方括号包围着([ and ])。在section声明后的所有parameters都是属于该section。对于一个section没有明显的结束标志符,一个section的开始就是上一个section的结束,或者是end of the file。Sections一般情况下不能被nested,当然特殊情况下也可以实现sections的嵌套。 section如下所示:
    [section]

    什么是comments?
    在INI文件中注释语句是以分号“;”开始的。所有的所有的注释语句不管多长都是独占一行直到结束的。在分号和行结束符之间的所有内容都是被忽略的。
    注释实例如下:
    ;comments text

  • IniFile类支持的数据类型 Windows API(WritePrivateProfileString)支持的类型为string类型,通过类型转换扩展了以下类型:
    bool,byte,byte[],char,Color,Datetime,decimal,double,float,int,
    long,Point,PointF,sbyte,short,Size,SizeF,uint,ulong,ushort,
    Struct*

  • 写文件

  IniFile ini = new IniFile("D:\\setup.ini");
  ini.Write("Setup", "Name", "Sunny");
  ini.Write("Setup", "Age", 18);
  ini.UpdateFile();

ini配置文件被写到D:\setup.ini
注意,ini文件名必须是完全路径,不能是相对路径
如果需要在程序可执行目录下生成ini文件,可用以下方法:

  IniFile ini = new IniFile(DirEx.CurrentDir() + "Setup.ini");

打开此文件

;<!--配置文件-->
[Setup]
Name=Sunny
Age=18

注意,如果写的文件在C盘,系统为win7以上,请确保所运行的程序有相应的权限可以在C盘文件夹写文件。 Write函数主要包括三个参数,分别对应Ini格式的section,name,value

  • 读文件
  IniFile ini = new IniFile("D:\\setup.ini");
  string name = ini.ReadString("Setup", "Name", "");
  int age = ini.ReadInt("Setup", "Age", 0);

Read函数主要包括三个参数,分别对应Ini格式的section,name,Default(如配置文件有值则从配置文件取值,如没有取Default值)

  • 其他函数
    获取指定的Section名称中的所有Key
    public string[] GetKeys(string section)

    从Ini文件中,读取所有的Sections的名称
    public string[] Sections

    读取指定的Section的所有Value到列表中
    public void GetSectionValues(string section, NameValueCollection values)

    清除某个Section
    public void EraseSection(string section)

    删除某个Section下的键
    public void DeleteKey(string section, string key)

    检查某个Section下的某个键值是否存在
    public bool KeyExists(string section, string key)