我正在使用boost :: property_tree来读取.ini文件。
我知道我可以阅读具体的key(inside section) -> iniTree.get<std::string>("section.key")
。
我知道我可以读取ini文件中的所有值。
我想只阅读特定部分的密钥。
类似的东西:iniTree.get<std::vector<std::string> >("section")
。
有可能吗?
答案 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