【问题标题】:How to read and write .ini files using boost library [duplicate]如何使用boost库读写.ini文件[重复]
【发布时间】:2013-03-16 20:27:13
【问题描述】:

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

【问题讨论】:

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

标签: c++ boost ini


【解决方案1】:

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

看看How to access data in property tree。 您绝对可以添加新属性或更新现有属性。 它提到容器上还有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

随意尝试。

【讨论】:

  • 当你说:pt.put("a.path.to.float.value",3.14f);它是如何在 .ini 文件中表示的?请记住 .ini 文件的格式为 [Elements] Elem1=Value1 ...
  • 我试一试,查看更新的答案,我已经为ini文件添加了示例代码
  • 可以提升处理带有utf8编码的INI文件吗?
  • @stefanB 请在您拨打write_ini 的电话中添加前缀boost::property_tree:: - 我花了20 分钟才弄清楚这一点。我会自己做,但这样的编辑通常会被拒绝。
猜你喜欢
  • 2015-01-05
  • 2012-02-11
  • 2013-06-14
  • 1970-01-01
  • 2013-05-21
  • 2015-01-19
  • 2011-09-04
  • 1970-01-01
  • 2011-08-07
相关资源
最近更新 更多