以文件名为键提升属性树

And*_*ndt 11 c++ boost boost-propertytree

我试图使用文件名作为boost :: PropertyTree中的键

然而 '.' 文件名中的字符(例如"example.txt")会导致在属性树中添加其他图层.最明显的解决方案是替换'.' 与另一个角色,但有一个更好的方法来做到这一点,例如使用转义字符.

在下面的示例中,值10将放在节点'txt'中,'example'的子节点.相反,我希望将值10存储在节点'example.txt'中.

ptree pt;
pt.put("example.txt", 10);
Run Code Online (Sandbox Code Playgroud)

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

在此先感谢您的帮助!

Pet*_*der 11

只需显式插入树:

pt.push_back(ptree::value_type("example.txt", ptree(10)));
Run Code Online (Sandbox Code Playgroud)

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

解决问题的另一种方法是在putand中使用额外的参数get,这会更改分隔符.

pt.put('/', "example.txt", "10");
pt.get<string>('/', "example.txt");
Run Code Online (Sandbox Code Playgroud)

为了记录,我以前从未使用过这门课程.我从您链接的页面获得了所有这些信息; )


And*_*ndt 8

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

pt.put(boost::property_tree::ptree::path_type("example.txt", '|'), 10);
Run Code Online (Sandbox Code Playgroud)

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