如何使用boost库读写.ini文件

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

2
我不仅需要解析 .ini 文件,还需要修改它的值。 - yosoy89
你的问题是关于正则表达式还是要使用哪个 boost 函数? - Thomas Matthews
@yosoy89:你也可以使用<boost/property_tree/ini_parser.hpp>修改值。 - Jesse Good
1个回答

7
使用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

随意尝试。


1
当你写下以下代码时: pt.put("a.path.to.float.value",3.14f); 它在.ini文件中是如何表示的?请记住,.ini文件的格式为[元素] 元素1=值1 ... - yosoy89
我会尝试一下,看看更新后的答案,我已经添加了ini文件的示例代码。 - stefanB
Boost能够处理UTF8编码的INI文件吗? - seveves
@stefanB 请在你调用 write_ini 函数时添加前缀 boost::property_tree:: - 我花了20分钟才弄明白这个问题。我本可以自己做,但像这样的编辑通常会被拒绝。 - Philipp Ludwig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接