2013-03-26 65 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