C++ Boost PropertyTree解析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文件內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- C++ Boost PropertyTree示例超詳細講解
- C++中Boost的智能指針weak_ptr
- C++基於Boost庫實現命令行解析
- C++中Boost的智能指針scoped_ptr
- C++ Boost Foreach超詳細分析講解