原文:.NET平台开源项目速览(1)SharpConfig配置文件读写组件

  在.NET平台日常开发中,读取配置文件是一个很常见的需求。以前都是使用System.Configuration.ConfigurationSettings来操作,这个说实话,搞起来比较费劲。不知道大家有没有同感。所以更多时候我还是喜欢使用开源的东西,更加方便简洁,也稳定。省去自己的麻烦。今天就介绍一个非常精致的.NET平台开源的操作配置文件(cfg/ini)的组件SharpConfig。走过路过,千万不要错过!上周我在这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧一文中也介绍过项目。我将会重点对部分开源项目进行深入的研究,形成“.NET平台开源项目速览”系列文章,该系列文章没有时间限制,会一直持续更新下去。

.NET开源目录:【目录】本博客其他.NET开源项目文章目录

本文原文地址:.NET平台开源项目速览(1)SharpConfig配置文件读写组件

1.SharpConfig简介

SharpConfig是.NET平台一个使用非常简单的处理Cfg/ini配置文件的类库。

项目主页:https://github.com/cemdervis/SharpConfig,目前最新版本是1.4.3;

Nuget包主页:https://www.nuget.org/packages/sharpconfig/,其主要功能有:

1.支持的配置文件类型有cfg,ini格式;

2.支持注释功能,使用 # 符号开头;

3.支持直接读取和写入指定节点的值;

4.支持枚举,数组,以及和实体的直接映射;

5.支持内存的创建和使用,相对一个配置类型,直接在代码中初始化和使用;

2.SharpConfig基本使用

下面通过一个简单的Demo来大概知道如何使用。下载后,解压,新建项目,添加dll引用,需要添加命名空间:

using SharpConfig;

我们添加一个如下格式的文件,文件名称为:example.ini,这个文件可以手动创建放在项目中,设置属性:“始终复制”即可,或者自己手动复制到bin目录也行。方便调用,放在其他路径也可以,最终都是fileName的路径来找文件的。example.ini的内容如下,这个例子也是项目主页的例子,我稍微修改了下:

[General] #这代表Section,也就是节点

SomeString = Hello SharpConfig!

SomeInteger = 10 #这里也是注释

SomeFloat = 20.05

ABoolean = true

下面使用代码直接读取这个配置文件的值:

static void Test1()
{//按文件名称加载配置文件Configuration config = Configuration.LoadFromFile("example.ini");//按照节的名称读取节Section section = config["General"];//依次根据每个配置项的名称来读取,如果配置文件类型搞错了,会报错string someString = section["SomeString"].Value;var someInteger = section["SomeInteger"].GetValue<Boolean>();float someFloat = section["SomeFloat"].GetValue<float>();Boolean someBool = section["ABoolean"].GetValue<Boolean>();Console.WriteLine("当前节名称:{0}",section.Name );Console.WriteLine("字符串SomeString值:{0}", someString);Console.WriteLine("整数someInteger值:{0}", someInteger);Console.WriteLine("双精度someFloat值:{0}", someFloat);Console.WriteLine("布尔值someBool值:{0}", someBool);
}

结果如下:

保存配置文件有以下一些方法:

myConfig.Save( "myConfig.cfg" ); // 保存到cfg格式的文本文件
myConfig.Save( myStream ); //保存到文本流中
myConfig.SaveBinary( "myConfig.cfg" ); //保存到cfg格式的二进制文件
myConfig.SaveBinary( myStream ); // 保存到二进制文件

是不是很简单,速度也很快。下面看看其他功能的使用。上面只是一个最基本的使用例子。

3.特殊数据类型的配置项目

3.1 枚举类型

枚举类型的支持其实和上面的值类型差不多,也是直接使用泛型的类型参数类获取枚举,而数组是相对特殊一点的,所以单独拿出来给大家介绍。

假设有一个Section名称为DateInfo,项目的Day有一个Monday值,是枚举类型DayOfWeek的一个值。如下面所示:

[DateInfo]

Day = Monday

调用的时候,使用一个枚举类型DayOfWeek 来读取:

DayOfWeek day = config["DateInfo"]["Day"].GetValue<DayOfWeek>();

3.2 数组类型

数组类型的支持,首先是统一转换为object数组,然后根据自己的需求要手动转换,其实可以写一个扩展方法,很简单,就不展开了。例如下面有一个节的项目是:

[General]

MyArray = {0,2,5,6}

读取的方法为:

object[] myArray = config["General"]["MyArray"].GetValue<object[]>();

4.动态创建配置文件与使用

动态在内存中创建配置文件,其实就是把Configuration当作一个实体类一样,在代码中创建和使用。例如下面的代码:

static void Test2()
{var myConfig = new Configuration();//节点VideomyConfig["Video"]["Width"].Value = "1920";myConfig["Video"]["Height"].Value = "1080";//设置数组myConfig["Video"]["Formats"].SetValue(new string[] { "RGB32", "RGBA32" });//可以使用循环获取节点以及节点的所有项目,进行操作foreach ( var section in myConfig ){foreach ( var setting in section ){//TODO:}}//也可以直接使用节点和项目的名称来访问:Console.WriteLine("Width:{0}", myConfig["Video"]["Width"].GetValue<Int32>());Console.WriteLine("Height:{0}", myConfig["Video"]["Height"].GetValue<Int32>());
}

  结果如下:

5.更简单的应用-对象映射

  在文章发表之前,我在“这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧”一文中已经提到该项目,网友回复如果字符串中包括了#字符,可能会被认为是注释的事情,这个的确是一个隐藏bug,不过应该很少会碰到,这个解决方案自己绕过弯吧,真的有,就在程序或者使用实体类映射的时候,单独处理一下。

这种情况在以前使用XCode组件时用的比较多。不过SharpConfig也支持,挺好用的。相当于把实体类的字段和配置文件对应起来,可以更加方便使用。类型和配置文件映射后,可以直接操作对象了。不需要上面那些步骤。假设有一个Person对象,如下格式:

public class Person
{public string Name { get; set; }public int Age { get; set; }public Gender Gender { get; set; }
}

Gender是一个性别的枚举类型,如下所示:

enum Gender
{Male,Female
}

假设配置文件是这样保存的:

[Person]

Name = Peter

Age = 50

Gender = Male

在实际使用的时候,使用下面的代码即可:

static void Test3()
{Configuration config = Configuration.LoadFromFile("example.ini");Person person = config["Person"].CreateObject<Person>();Console.WriteLine("Name:{0}",person.Name);Console.WriteLine("Age:{0}", person.Age);Console.WriteLine("Gender:{0}", person.Gender);
}

结果如下:

当然也可以将config["Person"]节直接映射对一个已经存在的对象,会直接覆盖原来的值。如下面代码:

config["Person"].MapTo(person);  

6.资源

大家可以从项目主页:https://github.com/cemdervis/SharpConfig下面源代码。亲,

我在这里提供一个下载,以及我使用的案例Demo例子。官方提供了一个Winform的图形界面,非常直观,这里截图看看,如果大家要用,从我这里下载也可以。

源码下载:http://files.cnblogs.com/files/asxinyu/SharpConfig-master.rar

  编译4.0dll下载:SharpConfig.rar

Winform显示配置文件的图形界面

.NET平台开源项目速览(1)SharpConfig配置文件读写组件相关推荐

  1. .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用

    原文:.NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用 在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了 ...

  2. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  3. .NET平台开源项目速览(2)Compare .NET Objects对象比较组件

    原文:.NET平台开源项目速览(2)Compare .NET Objects对象比较组件 .NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比 ...

  4. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...

  5. .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...

  6. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    .NET平台开源项目速览(4).NET文档生成工具ADB及使用 原文:.NET平台开源项目速览(4).NET文档生成工具ADB及使用 很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习 ...

  7. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

  8. .NET平台开源项目速览(12)哈希算法集合类库HashLib

    阅读目录 1.哈希算法介绍 2.HashLib功能介绍 .NET的System.Security.Cryptography命名空间本身是提供加密服务,散列函数,对称与非对称加密算法等功能.实际上,大部 ...

  9. .NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践

    晚上浏览博客园 看到一篇非常实用的博客:.NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper,花了10分钟简单了解了一下. 看评论也是挺有价值,同时也看到许多新手同学问道在实际项目 ...

最新文章

  1. “头移植模型”论文称换头术可行 业内疑两大问题未解
  2. 构建富互联网应用程序监控工作流和流程(1)
  3. 【深度学习】强化学习Q-Learning和DQN的应用(迷宫)
  4. VSCODE 10个高效开发插件
  5. Zookeeper ZAB 协议分析
  6. 软件交接需要交接哪些内容_从代理记账公司交接,需要交接哪些财务资料?
  7. matlab函数小结----数组区
  8. 苹果Mac照片编辑插件套件:Nik Collection
  9. buuctf刷题记录2 相册
  10. 10+必备的 WORDPRESS 常用插件
  11. 未来编程语言展望——G语言的神奇新要素
  12. android 4.4 设置谷歌拼音输入法为默认输入法,android4.4修改出厂默认输入法
  13. H5外部浏览器唤起微信分享
  14. NeHe OpenGL教程 第七课:光照和键盘 代码
  15. Mysql数据表一直显示使用中
  16. C语言顺序表,合并并排序(代码注释讲解)
  17. 架构师小跟班:推荐一款Java在线诊断工具,arthas入门及使用教程
  18. gpgpu_CPU与GPGPU
  19. 一毫米等于多少像素? - GetDeviceCaps
  20. MockLab:基于MockLab的第三方平台对接测试

热门文章

  1. 内外兼备的企业blog
  2. P1096 $Hanoi$双塔问题
  3. Shader 中的随机与噪声
  4. 前端每日实战:100# 视频演示如何用纯 CSS 创作闪闪发光的霓虹灯文字
  5. 表格元素的快捷获取以及隔行变色、鼠标移入变色案例
  6. 《用户至上:用户研究方法与实践(原书第2版)》一 3.4 法律层面的考虑
  7. 日请求亿级的QQ会员AMS平台PHP7升级实践
  8. Groovy学习摘要
  9. 2013首部著作封面抢先曝光
  10. 推荐 正则表达式入门教程