基于boost的ini 文件读取/枚举/写入操作

时间:2021-09-13 04:28:26
[setting]
key1=1
key2=hello

上面是ini文件的内容, 运行如下代码:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
void testIniParser() {
using namespace boost::property_tree;
ptree lvptProperties;
ini_parser::read_ini("d:\\temp\\win.ini", lvptProperties);
basic_ptree<string, string> lvbtItems = lvptProperties.get_child("setting");

//list all key/value under setting session
for (basic_ptree<string, string>::iterator lvitem=lvbtItems.begin();lvitem!=lvbtItems.end();lvitem++)
{
cout << (*lvitem).first.data() << "=" << (*lvitem).second.data() << endl;
}
int lvnInt = 0;
try{
//get single key value
lvnInt = lvbtItems.get<int>("key1");
cout << lvnInt<< endl;
}
catch (std::exception& e) {
cerr << e.what() << endl;
}
//change key values
lvptProperties.put<string>("setting.key2", "new value");
lvptProperties.put<int>("setting.key1", ++lvnInt);
//update ini file
ini_parser::write_ini("d:\\temp\\win.ini", lvptProperties);

}


运行结果:

key1=1
key2=hello
1

然后再重新打开win.ini看内容:

[setting]
key1=2
key2=new value

值得注意的是写入参数时不能用lvbtItems的put方法,估计这个类的数据已经从lvptProperties复制过来, 因为put了之后, lvptProperties的数据没变化 ,只能通过lvptProperties的put方法实现key/value的更新. 还有, 值得注意的是, put里面的path是session.key的形式提供, 比如setting.key1.