5

如何使用 boost 库读写(或修改).ini 文件?

4

1 回答 1

6

您可以读取和Boost.PropertyTree更新树,然后写入文件(请参阅loadsave函数。

看看如何访问属性树中的数据。您绝对可以添加新属性或更新现有属性。它提到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

随意尝试。

于 2013-03-26T22:32:00.010 回答