SunnyUI/docs/IniFile.md
2024-09-22 22:21:11 +08:00

3.8 KiB
Raw Blame History

Ini文件读写类


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

  • Ini文件格式 程序没有任何配置文件那么它对外是全封闭的一旦程序需要修改一些参数必须要修改程序代码本身并重新编译为了让程序出厂后还能根据需要进行必要的配置所以要用配置文件配置文件有很多种如INI配置文件XML配置文件cfg配置文件还有就是可以使用系统注册表等。
    INI ”就是英文 “initialization”的头三个字母的缩写当然INI file的后缀名也不一定是".ini"也可以是".cfg"".conf ”或者是".txt"。
    INI文件的格式很简单最基本的三个要素是parameterssections和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 APIWritePrivateProfileString支持的类型为string类型通过类型转换扩展了以下类型
    boolbytebyte[]charColorDatetimedecimaldoublefloatint
    longPointPointFsbyteshortSizeSizeFuintulongushort
    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格式的sectionnamevalue

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

Read函数主要包括三个参数分别对应Ini格式的sectionnameDefault如配置文件有值则从配置文件取值如没有取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)