基於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.