我正在尝试将文件名用作boost::PropertyTree
中的键然而,'。'文件名中的字符(例如“example.txt”)会导致在属性树中添加其他图层。最明显的解决方案是替换'。'与另一个角色,但有可能有更好的方法,例如使用转义字符。
在下面的示例中,值10将放在节点'txt'中,'example'的子节点。相反,我希望将值10存储在节点'example.txt'中。
ptree pt;
pt.put("example.txt", 10);
如何为单个节点使用完整文件名?
提前感谢您的帮助!
答案 0 :(得分:10)
只需明确插入树:
pt.push_back(ptree::value_type("example.txt", ptree(10)));
put
方法只是为了方便,这就是为什么它会自动解析.
作为附加层。像我上面所示显式构造value_type可以避免这个问题。
解决问题的另一种方法是在put
和get
中使用额外的参数,这会更改分隔符。
pt.put('/', "example.txt", "10");
pt.get<string>('/', "example.txt");
为了记录,我以前从未使用过这门课程。我从您链接的页面获得了所有这些信息; )
答案 1 :(得分:7)
问题是文档已经过时了。必须按如下方式创建路径类型对象,另一个字符对于指定为分隔符的文件路径无效,如下所示:
pt.put(boost::property_tree::ptree::path_type("example.txt", '|'), 10);
我从Philippe Vaucher发布的新闻组gmane.comp.lib.boost.devel的boost邮件列表中找到了解决方案的路径。