12

我正在尝试使用文件名作为boost::PropertyTree中的键

然而 '。' 文件名中的字符(例如“example.txt”)会导致在属性树中添加一个附加层。最明显的解决方案是替换 '.' 使用另一个字符,但可能有更好的方法来执行此操作,例如使用转义字符。

在下面的示例中,值 10 将被放入节点 'txt',它是 'example' 的子节点。相反,我希望将值 10 存储在节点“example.txt”中。

ptree pt;
pt.put("example.txt", 10);

如何为单个节点使用完整文件名?

在此先感谢您的帮助!

4

2 回答 2

12

只需明确插入树:

pt.push_back(ptree::value_type("example.txt", ptree(10)));

put方法只是为了方便而存在,这就是它自动解析.为附加层的原因。像我上面展示的那样显式地构造 value_type 可以避免这个问题。

put解决问题的另一种方法是在and中使用额外的参数get,这会改变分隔符。

pt.put('/', "example.txt", "10");
pt.get<string>('/', "example.txt");

作为记录,我以前从未使用过这个类。我从您链接到的页面获得了所有这些信息;)

于 2009-12-22T20:02:12.663 回答
8

问题是文档已经过时了。必须按如下方式创建路径类型对象,并将另一个对文件路径无效的字符指定为分隔符,如下所示:

pt.put(boost::property_tree::ptree::path_type("example.txt", '|'), 10);

我从 Philippe Vaucher 发布的新闻组 gmane.comp.lib.boost.devel 的 boost 邮件列表中找到了解决方案的路径。

于 2010-02-17T17:34:53.387 回答