服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++ Boost PropertyTree解析INI文件详解

C++ Boost PropertyTree解析INI文件详解

2022-08-09 10:33LyShark C/C++

Boost PropertyTree库不仅可以解析JSON,XML格式,还可以直接解析INI格式文件。这篇文章就是为大家介绍一下如何通过Boost PropertyTree解析INI文件,需要的可以参考一下

前言

PropertyTree是一个非常牛叉的东西!虽然很小,但是,相当需要,相当重要!因为,很多的东西,我们不需要去开发,只需要去用就好了,这个东西的开发正的是极好极好的!

更重要的是,它来自大名鼎鼎的Boost库,这个库的重要性,已经是不言而喻了!

property_tree是一个保存了多个属性的树形数据结构!

可以使用类似访问路径的方式问任意节点的属性,而且每个节点都可以用类似STL的风格遍历子节点。

property_tree适合于应用程序的配置数据处理,可以解析xml、ini、json和info四种格式的文本数据据

它简直,就是最好的读取配置文件库!

什么是property_tree?

属性树库提供了一种数据结构,该数据结构存储了任意深度嵌套的值树,并通过一些键在每个级别上建立索引。树的每个节点都存储它自己的值,以及它的子节点和它们的键的有序列表。树允许通过路径方便地访问任何节点,这是多个键的的存储

此外,该库为许多数据格式提供了解析器和生成器,这些数据格式可以由这样的树表示,包括XML、INI和JSON

属性树是通用的数据结构,但特别适合保存配置数据。树提供了自己的树特有的接口,并且每个节点也是其子节点的stl兼容序列。【说白了,这就是一个自我嵌套的数据结构】

在概念上,节点可以被认为是以下结构:

?
1
2
3
4
5
struct ptree
{
data_type data;// data associated with the node
list< pair<key_type, ptree>> children;// ordered list of named children
};

可以看到,这个就是一个自我嵌套的一个数据结构!

C++ Boost PropertyTree解析INI文件详解

key_type和data_type在某种程度上都是可配置的,但是通常是std::string或std::wstring,而解析器只处理这种树。

许多软件项目在其生命周期的某一时刻开发了类似的工具,而属性树也以相同的方式产生。我们希望lib能拯救许多人,让他们不要重新发明轮子。

实现代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <string>
#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/ini_parser.hpp>
 
using namespace std;
using namespace boost;
 
// 写入文件
void init_ini(const std::string &filename)
{
    using boost::property_tree::ptree;
    ptree pt;
 
    // 增加新的键值对
    pt.add("config.address", "192.168.1.1");
    pt.add("config.port", 22);
    // 修改原有键值对
    pt.put("config.port", 3389);
    write_ini(filename, pt);
}
 
int main(int argc, char *argv[])
{
    std::string f("c://config.ini");
    init_ini(f);
 
    // 读取ini文件
    boost::property_tree::ptree ptr, tag;
    boost::property_tree::ini_parser::read_ini("c://config.ini", ptr);
 
    tag = ptr.get_child("config");
    std::string address = tag.get<std::string>("address");
    int port = tag.get<int>("port");
    std::cout << "地址: " << address << " 端口: " << port << std::endl;
 
    std::system("pause");
    return 0;
}

到此这篇关于C++ Boost PropertyTree解析INI文件详解的文章就介绍到这了,更多相关C++ Boost PropertyTree解析INI文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/LyShark/p/15765692.html

延伸 · 阅读

精彩推荐
  • C/C++C语言实现修改文本文件中特定行的实现代码

    C语言实现修改文本文件中特定行的实现代码

    最近由于项目需要实现修改文件的功能,所以,博主认真查阅了一些资料,但是,很遗憾,并没有太多的收获,因此记录下本篇C语言实现修改文本文件中特...

    C语言教程网4332020-12-16
  • C/C++C++ lambda 捕获模式与右值引用的使用

    C++ lambda 捕获模式与右值引用的使用

    这篇文章主要介绍了C++ lambda 捕获模式与右值引用的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    WolfcsTech5372021-08-27
  • C/C++数组指针、指针数组以及二维数组的深入解析

    数组指针、指针数组以及二维数组的深入解析

    下面来讲讲多维数组与指针的关系。与普通数组一样,使用多维数组时,实际上将其自动转换为指向该数组第一个元素的指针 ...

    C语言教程网9322020-12-25
  • C/C++c语言实现输入一组数自动从大到小排列的实例代码

    c语言实现输入一组数自动从大到小排列的实例代码

    下面小编就为大家带来一篇c语言实现输入一组数自动从大到小排列的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编...

    C语言教程网4922021-04-16
  • C/C++Opencv 视频转为图像序列的实现

    Opencv 视频转为图像序列的实现

    今天小编就为大家分享一篇Opencv 视频转为图像序列的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yhl_leo5732021-08-08
  • C/C++c语言连接mysql数据库的实现方法

    c语言连接mysql数据库的实现方法

    C语言连接mysql数据库,需要相应的头文件和lib文件,如果你安装Mysql数据库,会在安装目录下找到这些库文件,如果没有安装,也可以在网上找到...

    脚本之家2122020-11-09
  • C/C++用C++实现推箱子

    用C++实现推箱子

    这篇文章主要为大家详细介绍了用C++实现推箱子,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    苏苏这题又不会做了→_→5392021-09-29
  • C/C++C++设计模式之迭代器模式

    C++设计模式之迭代器模式

    这篇文章主要介绍了C++设计模式之迭代器模式,本文讲解了什么是迭代器模式、迭代器模式的代码实例等内容,需要的朋友可以参考下...

    果冻想8722021-02-05