C++ Config 配置文件类
C++ Config 配置文件类
本文Config类的序列化和反序列化使用的jsoncpp, 因为jsoncpp提供的方法很简单易阅读。配置文件的格式自然也是json。

1 {
2 "image" : {
3 "savepath" : "D:\\Documents\\Pictures\\Wayixia"
4 }
5 }

google了一下"C++ Config", 这类的文章有不少,写的很nice,但都是ini的,ini的层次和数据结构是有限的,例如,
1 [image]
2 files=1.jpg,2.jpg,3.jpg
当通过ini工具类读取到files的内容时,不得不需要一个格式化内容的方法或者接口;当配置内容很多的时候,为了便于修改或者阅读,不得不写额外的代码:

1 [sectionname1]
2 fieldname=...
3
4 [sectionname2]
5 fieldname=...
6
7 [sectionname3]
8 fieldname=...
9
10 ...

理想中的配置文件类的接口很简单,自然生产的Josn文件也很简单易读

1 Config config;
2 // 读取文件
3 config.FromFile([filename]);
4
5 // Get一个值
6 // value 是一个类型,可以根据需要自动转换,例如v.toInt(), v.toString()...
7 value v = config.Get("sectionname.fieldname", [default_value]);
8
9 // 转换相应的类型
10 int a = v.toInt()
11 std::string s = v.toString();
12 ...
13
14 // Set一个值
15 config.Set("sectionname.fieldname", [value]);
16
17 // 保存到文件
18 config.ToFile([filename])

以下是封装的一个Config类, 使用前需要配置好jsoncpp的包含头文件和库,点击这里下载。
自然,用json做配置的应用程序不在少数,有兴趣的同学欢迎参与讨论。发现错误及时通知修正,谢谢!
[2013-07-08] 修正文件读取bug 下载已经更新
C++ Config 配置文件类的更多相关文章
- C#读写config配置文件--读取配置文件类
一:通过Key访问Value的方法: //判断App.config配置文件中是否有Key(非null) if (ConfigurationManager.AppSettings.HasKeys()) ...
- C#读写config配置文件
应用程序配置文件(App.config)是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序. 对于一个config ...
- 关于App.config配置文件
今天在做复习的时候,突然发现自己无法读取配置文件中的数据库连接字符串,而且检查了半天也没找出原因,最后求助万能的度娘才得以解决—— 1.App.config配置文件在项目中添加后不要修改名称,否则会出 ...
- App.config和Web.config配置文件的自定义配置节点
前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文 ...
- C# 读写App.config配置文件
一.C#项目中添加App.config配置文件 在控制台程序中,默认会有一个App.config配置文件,如果不小心删除掉,或者其他程序需要配置文件,可以通过添加得到. 添加步骤:右键项目名称,选择“ ...
- 读写App.config配置文件的方法
我们经常会希望在程序中写入一些配置信息,例如版本号,以及数据库的连接字符串等.你可能知道在WinForm应用程序中可以利用Properties.Settings来进行类似的工作,但这些其实都利用了Ap ...
- 【C#】#103 动态修改App.config配置文件
对 C/S模式 下的 App.config 配置文件的AppSetting节点,支持配置信息现改现用,并可以持久保存. 一. 先了解一下如何获取 配置信息里面的内容[获取配置信息推荐使用这个] 1.1 ...
- Asp.net中web.config配置文件详解
Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中 ...
- Java加载配置文件类
/** * 对应配置文件类, */ package com.up72.parkSys.ThirdParty; import java.io.IOException;import java.io.In ...
随机推荐
- 关于SelectedItems的问题
在做俄罗斯方块的时候写了以下一段代码: private void listView1_SelectedIndexChanged(object sender, EventArgs e) { ...
- Php设计模式(三):行为型模式part1
原文详见:http://www.ucai.cn/blogdetail/7023?mid=1&f=5 可以在线运行查看效果哦! 在上一篇我们讲了结构型模式,结构型模式是讨论类和对象的结构的.总共 ...
- 第1章3节《MonkeyRunner源码剖析》概述:架构(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
- 第1章1节《MonkeyRunner源码剖析》概述:前言(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
- C#修改用户名
string strCmdText; strCmdText = "useraccount where name='" + 旧密码 + "' rename " + ...
- .net的页面在大并发下出现503错误
.net的页面在大并发下偶尔出现503错误 我们开发了一个回调页面,由一个工具负责调用,由于压力非常大,回调页面通过6台服务器负载均衡的: 最近业务系统又再次扩容,回调页面压力成倍增加,在高峰时间段偶 ...
- Excel和notepad++加之更换
1. 替换文本的内容Tab长度,粘合剂Excel有效的变革在列. 2. 替换空行.这里用到回车跟换行.回车\r使光标回到最左,换行\n使光标下移一行. 版权声明:本文博客原创文章,博客,未经同意,不得 ...
- SQLSever: 如何在select中的每一行产生不同的随机数?
原文:SQLSever: 如何在select中的每一行产生不同的随机数? select 的随机函数有点假, 也许是因为它是基于时间来的吧, 同一select中由于时间无法错开导致产生的随机数都是一样的 ...
- CanVas类(绘图类)
知识点: Canvas():创建一个空的画布,可以使用setBitmap()方法来设置具体的画布 Canvas(Bitmap bitmap):以bitmap对象创建一个画布,则将内容都绘制在Bitma ...
- HTML框架集之Frameset与Iframe简单应用
首先我们要明白此框架集的作用: 实现在一个页面中访问多个html页面的目的Frameset的用法: //定义框架集<frameset><frame src="demo.ht ...