昨天因为需要读取配置文件略略伤神。网上很多例子但是我用都会报错,很多人把Boost.PropertyTree的函数写很麻烦的包所以报错我也不知道什么问题,所以今天整理下。

头上附上官网链接:Boost C++库 因为别人的代码再用的顺手都是别人的思路,有不明白还是官网最好理解

然后分享和分析下我的代码:

  #include <boost/property_tree/ptree.hpp>  
#include <boost/property_tree/ini_parser.hpp>
//定义初始化
boost::property_tree::ptree m_pt, tag_setting; read_ini("/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt);
tag_setting = m_pt.get_child(tagname); int x = tag_setting.get<int>("pos_x",);
int y = tag_setting.get<int>("pos_y",); std::cout << x << y<<std::endl;

首先,boost::property_tree::ptree m_pt, tag_setting;创建对象,这句话放在初始化声明里。

然后,read_ini("/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt);读取你要读取的路径和文件名,m_pt是将要读取这个文件的对象。看到别人博客里面有给read_ini前面加包名这样写的boost::property_tree::ini_parser::read_ini(ini_file, m_pt);我开始直接粘过去编译一直通不过,后来去掉就可以了不知为何。

这句,tag_setting = m_pt.get_child(tagname);因为ini文件是分很多section的,tagname就是【】中的名字,告诉系统是读取这一块。注意,tag_setting这时候读到的是ini的一块内容。

接着,int x  = tag_setting.get<int>("pos_x",20);
              int y  = tag_setting.get<int>("pos_y",20);这两句就是读取tagname块中的具体值啦,参数pos_x是ini文件的变量名,后面的20是如果在配置文件中没有找到这个变量则默认20这个值。

最后,读取就可以啦std::cout <<  x  <<  y<<std::endl;

根据官网的意思,似乎读xml和Json也是一样的,但是函数和头文件名里的ini就好相应的改变啦。

对了,最后附上我的ini:

[e2004000780c002212709894]
pos_x = 30
pos_y = 40 [e2004000780c00221450823d]
pos_x = 50
pos_y = 20 [aaaabbbb3333444412410000]
pos_x = 01
pos_y = 90

/*------------------------------------------------------------------------可爱的分割线---------------------------------------------------------------------------*/

刚刚加了写入功能代码+讲解:

tag_setting.clear(); //不清除的话新的标签默认会继承上一个标签中的内容
tag_setting.put<int>("pos_x",); m_pt.put_child(tagname,tag_setting); //写入新的标签,如果标签名一样,会修改你前一个的内容,如果不一样就会在下面新加一个
write_ini("/home/feixiao/catkin_ws/src/uhf_rfid_api/config/template_config.txt.in", m_pt);

第一句tag_setting.put<int>("pos_x",666);改变pos_x变量的值。

后一句,如果名字跟前面的一样,会改变前面的值,否则会新生成一个。

下面两个不解释了,试了下add_child,有问题。

另附链接:boost函数库

Boost.PropertyTree读取ini文件(Linux环境)的更多相关文章

  1. C#读取ini文件的方法

    最近项目用到ini文件,读取ini文件,方法如下: using System; using System.Collections.Generic; using System.Linq; using S ...

  2. VS VC 读取 INI文件

    1.获取应程序同极目录下的config.ini路劲 void GetConfigFilePath(char *path,int len, char *file) { char module[256] ...

  3. C# 读取ini文件,读不出来原因

    先赋上相关读取ini文件代码 public class INIHelper { public string inipath; [DllImport("kernel32")] pri ...

  4. C# 通过api函数GetPrivateProfileString读取ini文件,取不到值

    通过api函数GetPrivateProfileString读取ini文件,取不到值,测试了好长时间,都不行 确认程序,ini文件都没有错误的情况,最后发现是ini文件编码的原因. 将ini文件的编码 ...

  5. C# 读取ini文件 百度问问学习文档

    C# 读取ini文件 10 有多个section,现想读取整个ini文件和指定section下所有内容 补充: 发布答案可以,请对准题目啊,我不要指定节点的内容,我知道!我要的是读取指定区域的内容,假 ...

  6. python中configparser模块读取ini文件

    python中configparser模块读取ini文件 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(se ...

  7. bat 读取 ini 文件

    bat 读取 ini 文件 参考链接:https://stackoverflow.com/questions/2866117/windows-batch-script-to-read-an-ini-f ...

  8. java读取ini文件

    ini工具类; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import j ...

  9. Python基础之读取ini文件

    基本使用方法 第一步:准备一份INI文件.如test1.ini [ITEMS] item1=1 item2=2 item3=3 item4=4 [ITEM1] test1=aaa [ITEM2] te ...

随机推荐

  1. POJ 1733 Parity game(种类并查集)

    http://poj.org/problem?id=1733 题意: 给出一个01串,有多次询问,每次回答[l,r]这个区间内1的个数的奇偶性,但是其中有一些回答是错误的,问到第几个回答时与前面的回答 ...

  2. 什么是java OOM?如何分析及解决oom问题?

    最近查找了很多关于OOM,甚至于Java内存管理以及JVM的相关资料,发现这方面的东西太多了,竟有一种眼花缭乱的感觉,要想了解全面的话,恐非一篇文章能说清的,因此按照自己的理解整理了一篇,剩下的还需要 ...

  3. Python Scrapy安装

    直接安装scrapy 各种报错,后来各种百度终于解决了,如下是亲身的经历. pip install scrapy 这样直接会报错. 第一步: 先安装wheel pip install wheel 第二 ...

  4. 后台返回数据判断是http还是后台本地图片 indexOf

    今天的笔记呢,记录一下 其实这个应该后台去判断的,但是因为某种原因,今天我们前台做一下判断 事情是这样的,后台返回我一个url  这个url有的http开头的 也有他后台本地的例如:/img/1.pn ...

  5. IDEA中mybatis插件自动生成手写sql的xml文件

    上图: 选择这个安装,然后重启IDEA,ok.

  6. restFul接口设计规范

    1.域名 1 应该尽量将API部署在专用域名之下. https://api.example.com 2 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下. https://example. ...

  7. Tp3.2 复合查询

    我们常常有这样的需求,比如搜索. 搜索出,标题,子标题,内容中包含某某关键字. 这就要and,or结合使用了. $where = ['is_show'=>1,'status'=>1]; / ...

  8. Python 注释,类,属性,方法,继承

    # coding=utf-8 支持中文 """ 多行注释 声明鸟类 """ class Bird(object): have_feather ...

  9. vue2.0 axios交互

    vue使用axios交互时候会出现的问题大致有三个: 1:本地调试跨域问题? 2:post请求,传参不成功,导致请求失败? 3:axios引用,在使用的组件里面引用 解决方案: 问题一:跨域? 解决本 ...

  10. 优雅地记录Python程序日志1:logging模块简介

    本文摘自:https://zhuanlan.zhihu.com/p/31893724 本篇涉及: logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 前言 在使 ...