一个基于 key-value 的配置文件C#读写类(附源代码)

简介

基于 key-value 的配置文件被广泛得到应用,为了便于操作,如配置文件 config.ini 有以下内容:

[System]
Encoding=UTF-8
BatchNumber=50
Version=4.4
OutputPath=C:\FILES
LastTime=2019/05/23 04:29:35 
[Others]
LastTime=2019/05/22 10:22:54 

配置文件分为不同的段,段与段之间使用[段名] 进行分隔,可以通过 System.BatchNumber 作为 key 获得对应的值为 50。不同的段可以有相同的变量名,如 System.LastTimeOthers.LastTime

为了便于读写,特编写了一个用于此操作的类 Windgoes.Data.ConfigAccess。它是一个基于字符串的用于简单的配置参数记录的的类。提供了基于(key, value) 方式的读写方法,同时数据也可以向文件中做持久化。

约定

为了保证通用性,本类对配置文件的格式做出以下约定:

  • 配置文件以段进行划分,每个段有多个 key-value 项;
  • 段名的格式为 [$段名], 其中 $段名 为字母、数字和下划线组成,如 [System][Part_1][Others]
  • 每个 key 都有唯一对应的段名,其中段名格式 为字母、数字和下划线组成;
  • key和value使用等号连接,key 左右的空格会被删除,value中可以包括等于号;
  • key 和段名使用点(.) 连接,如 System.Encoding ,如果key中不包括点,则会被当成默认段Others来处理,如 Encoding 会被当成 Others.Encoding 来处理;
  • 一个包括段名的主键中,只有一个点号;
  • 如果在同一个文件中相同的 key 出现多次,取第一次出现的值,忽略后面的值;
  • value 的内容无限制,最小长度为0;
  • 以 # 或 // 头的行会被当成注释而会忽略;
  • value中的换行符(即 /n)会被替换为一个长度为15的特殊字符串,从而保证在换行时不受影响。
  • 配置文件默认使用 Encoding.UTF8 进行编码。
  • 每个 GetXXX 函数(如 GetDateTime) 包括 GetXXX(section, key, defaultValue) 和 GetXXX(key, defaultValue) 两个函数。如果不写段名,默认段名为 Others
  • 即便在调用 GetXXX(section, key, defaultValue)时,仍然写了全名,如 GetDateTime("Others", "System.LastTime", DateTime.Now),程序会根据名称中已经包括了 . 而按照 System.LastTime 来处理,而不是简单相加成 Others.System.LastTime

主要方法

// 初始化
ConfigAccess ca = new ConfigAccess("config.ini")

// 保存数据:
ca.Save();

// 写入数据
ca.SetValue("System.LastDate", "2019/05/23 04:29:35");

// 移除key,成功返回 true, 失败返回 false
ca.Remove(key);

// 读取数据 
ca.GetString(key); // 读取 字符串,失败时返回为空。

/************ 读取 double 类型 ************/
// 读取键值为key的数据并转换为 double, 失败返回为 double.NaN
ca.GetDouble(key); 
// 读取键值为key的数据并转换为 double, 失败返回为 -0.1
ca.GetDouble(key, -0.1); 
// 读取键值为 section.key 的值并转换为 double, 失败返回为 double.NaN
ca.GetDouble(section, key, double.NaN); 

// 注:除了 GetDouble 方法,还提供了一系列的 GetXXX 的方法用于获得不同数据的转换,
// 如 GetInt, GetFloat, GetDateTime 等等。


// 保存数据
ca.Save();

支持保存的数据类型

  • string
  • int
  • float
  • double
  • bool
  • DateTime
  • 可序列化的繁杂数据类型

源代码

ConfigAccess 类参见:https://gitee.com/hwaust/WindGoes6/blob/master/Windgoes6/Data/ConfigAccess.cs
ConfigItem 类参见:https://gitee.com/hwaust/WindGoes6/blob/master/Windgoes6/Data/ConfigItem.cs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值