2013-03-26 106 views
3

如何使用boost庫讀取(或修改).ini文件?如何使用boost庫讀取和寫入.ini文件

+2

我不僅需要解析.ini文件,我還需要修改它的值 – yosoy89 2013-03-26 21:04:17

+0

您的問題是關於正則表達式或使用哪個'boost'函數? – 2013-03-26 21:16:37

+0

@ yosoy89:您也可以使用''修改值。 – 2013-03-26 21:17:19

回答

4

隨着Boost.PropertyTree您可以讀取和更新樹,然後寫入一個文件(見loadsave功能。

看一看How to access data in property tree。 你絕對可以添加新的屬性或更新現有的一個。 它mentiones有集裝箱的erase以及所以你應該能夠刪除現有的數值來自實例boost(以上鍊接):

ptree pt; 
pt.put("a.path.to.float.value", 3.14f); 
// Overwrites the value 
pt.put("a.path.to.float.value", 2.72f); 
// Adds a second node with the new value. 
pt.add("a.path.to.float.value", 3.14f); 

我會假設你然後將更新後的樹寫入文件,無論是新文件還是覆蓋現有文件。

編輯: 對於ini文件它執行特定的檢查。

如果您嘗試保存和您ini_parser到INI上面的例子:

  1. ptree中太深
  2. 重複鍵

有了,這裏固定是寫一個示例代碼ini文件中,我更新了現有密鑰的值,然後添加了新密鑰:

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

void save(const std::string &filename) 
{ 
    using boost::property_tree::ptree; 

// pt.put("a.path.to.float.value", 3.14f); 
// pt.put("a.path.to.float.value", 2.72f); 
// pt.add("a.path.to.float.value", 3.14f); 

    ptree pt; 
    pt.put("a.value", 3.14f); 
    // Overwrites the value 
    pt.put("a.value", 2.72f); 
    // Adds a second node with the new value. 
    pt.add("a.bvalue", 3.14f); 

    write_ini(filename, pt); 
} 

int main() 
{ 
    std::string f("test.ini"); 
    save(f); 
} 

test.ini文件:

[a] 
value=2.72 
bvalue=3.14 

隨意試驗。

+0

當你說: pt.put(「a.path.to.float.value」,3.14f); 它如何在.ini文件中表示?記住.ini文件的格式爲[Elements] Elem1 = Value1 ... – yosoy89 2013-03-27 21:08:09

+0

我試試看,看到更新後的答案,我已經爲ini文件添加了示例代碼 – stefanB 2013-03-27 22:31:42

+0

可以使用utf8編碼來提升處理INI文件的能力嗎? – seveves 2013-11-15 17:34:09