Boost :: ini_parser:读取特定部分值的方法是什么?

时间:2015-07-01 15:25:09

标签: c++ windows boost ini

我正在使用boost :: property_tree来读取.ini文件。

我知道我可以阅读具体的key(inside section) -> iniTree.get<std::string>("section.key")

我知道我可以读取ini文件中的所有值。

我想只阅读特定部分的密钥。

类似的东西:iniTree.get<std::vector<std::string> >("section")

有可能吗?

1 个答案:

答案 0 :(得分:1)

是。你使用'get_child'来获得一个子树。

如果您事先不知道该部分是否存在,您可以使用get_child_optional

这是一个显示两种变体的演示:

<强> Live On Coliru

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <fstream>
#include <iostream>

using boost::property_tree::ptree;

int main() {

    std::fstream ifs("input.txt");
    ptree pt;

    read_ini(ifs, pt);

    // let's get just the section2

    if (boost::optional<ptree&> oops = pt.get_child_optional("oops")) {
        std::cout << "There is a section `oops`\n";
    } else {
        std::cout << "There is NO section `oops`\n";
    }

    ptree& sub1 = pt.get_child("section2"); // we want the CCs!
    write_ini(std::cout, sub1);
}

并给出了一个input.txt:

[section1]

huh=value1
slam=value2
cram=value3

[section2]

rabbits=creditcard1
die=creditcard2
eagerly=creditcard3

它会打印输出:

There is NO section `oops`
rabbits=creditcard1
die=creditcard2
eagerly=creditcard3