BoostPropertyTree库不仅可以解析JSON,XML格式,还可以直接解析INI格式文件。这篇文章就是为大家介绍一下如何通过BoostPropertyTree解析INI文件,需要的可以参考一下
前言
PropertyTree是一个非常牛叉的东西!虽然很小,但是,相当需要,相当重要!因为,很多的东西,我们不需要去开发,只需要去用就好了,这个东西的开发正的是极好极好的!
更重要的是,它来自大名鼎鼎的Boost库,这个库的重要性,已经是不言而喻了!
property_tree是一个保存了多个属性的树形数据结构!
可以使用类似访问路径的方式问任意节点的属性,而且每个节点都可以用类似STL的风格遍历子节点。
property_tree适合于应用程序的配置数据处理,可以解析xml、ini、json和info四种格式的文本数据据
它简直,就是最好的读取配置文件库!
什么是property_tree?
属性树库提供了一种数据结构,该数据结构存储了任意深度嵌套的值树,并通过一些键在每个级别上建立索引。树的每个节点都存储它自己的值,以及它的子节点和它们的键的有序列表。树允许通过路径方便地访问任何节点,这是多个键的的存储
此外,该库为许多数据格式提供了解析器和生成器,这些数据格式可以由这样的树表示,包括XML、INI和JSON
属性树是通用的数据结构,但特别适合保存配置数据。树提供了自己的树特有的接口,并且每个节点也是其子节点的stl兼容序列。【说白了,这就是一个自我嵌套的数据结构】
在概念上,节点可以被认为是以下结构:
struct ptree
{
data_type data;// data associated with the node
list< pair<key_type, ptree>> children;// ordered list of named children
};
可以看到,这个就是一个自我嵌套的一个数据结构!
key_type和data_type在某种程度上都是可配置的,但是通常是std::string或std::wstring,而解析器只处理这种树。
许多软件项目在其生命周期的某一时刻开发了类似的工具,而属性树也以相同的方式产生。我们希望lib能拯救许多人,让他们不要重新发明轮子。
实现代码
#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文件内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C++ Boost PropertyTree解析INI文件详解


基础教程推荐
- C语言 structural body结构体详解用法 2022-12-06
- 详解c# Emit技术 2023-03-25
- C/C++编程中const的使用详解 2023-03-26
- 一文带你了解C++中的字符替换方法 2023-07-20
- C利用语言实现数据结构之队列 2022-11-22
- C++详细实现完整图书管理功能 2023-04-04
- C++中的atoi 函数简介 2023-01-05
- 如何C++使用模板特化功能 2023-03-05
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C语言基础全局变量与局部变量教程详解 2022-12-31