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

[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.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值