Boost.PropertyTree读取ini文件(Linux环境)
昨天因为需要读取配置文件略略伤神。网上很多例子但是我用都会报错,很多人把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环境)的更多相关文章
- C#读取ini文件的方法
最近项目用到ini文件,读取ini文件,方法如下: using System; using System.Collections.Generic; using System.Linq; using S ...
- VS VC 读取 INI文件
1.获取应程序同极目录下的config.ini路劲 void GetConfigFilePath(char *path,int len, char *file) { char module[256] ...
- C# 读取ini文件,读不出来原因
先赋上相关读取ini文件代码 public class INIHelper { public string inipath; [DllImport("kernel32")] pri ...
- C# 通过api函数GetPrivateProfileString读取ini文件,取不到值
通过api函数GetPrivateProfileString读取ini文件,取不到值,测试了好长时间,都不行 确认程序,ini文件都没有错误的情况,最后发现是ini文件编码的原因. 将ini文件的编码 ...
- C# 读取ini文件 百度问问学习文档
C# 读取ini文件 10 有多个section,现想读取整个ini文件和指定section下所有内容 补充: 发布答案可以,请对准题目啊,我不要指定节点的内容,我知道!我要的是读取指定区域的内容,假 ...
- python中configparser模块读取ini文件
python中configparser模块读取ini文件 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(se ...
- bat 读取 ini 文件
bat 读取 ini 文件 参考链接:https://stackoverflow.com/questions/2866117/windows-batch-script-to-read-an-ini-f ...
- java读取ini文件
ini工具类; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import j ...
- Python基础之读取ini文件
基本使用方法 第一步:准备一份INI文件.如test1.ini [ITEMS] item1=1 item2=2 item3=3 item4=4 [ITEM1] test1=aaa [ITEM2] te ...
随机推荐
- Lintcode241-String to Integer - Naive
Given a string, convert it to an integer. You may assume the string is a valid integer number that c ...
- 在Idea创建Spring Boot + MyBatis的web项目
创建步骤如下 选择Spring initializr 2. 修改group 与 atifact id,点击next 3. dependencies里面选择Web->Web , SQL -> ...
- 【Django】【Shell】
django-admin startproject guest python manage.py startapp sign python manage.py runserver 127.0.0.1: ...
- docker 日志分析
日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (Ce ...
- Python 函数也是一种对象
函数也是一种对象 func = lambda x, y: x+y print func(3, 4) def func(x, y): return x+y print func(3, 4) 效果相同. ...
- DRF框架固定配置
1.认证Authentication 可以在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_ ...
- JS 字符串两边截取空白的trim()方法的封装
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 03-python-装饰器
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权 ...
- JAVA中”单引号”,“双引号”,“没有单引号和双引号”区别:
单引号引的数据 是char类型的——>单引号只能引一个字符(表示单个字符)双引号引的数据 是String类型的——>而双引号可以引0个及其以上(引用字符串) char类型的值用单引号引起来 ...
- Python Selenium Cookie 绕过验证码实现登录
Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...