Увеличьте дерево свойств с именем файла в качестве ключа
-
21-09-2019 - |
Вопрос
Я пытаюсь использовать имена файлов в качестве ключа в повышение::PropertyTree
Однако символ '.' в имени файла, таком как "example.txt", приводит к добавлению дополнительного слоя в дереве свойств.Наиболее очевидным решением было бы заменить '.' другим символом, но, вероятно, есть лучший способ сделать это, например, с помощью управляющего символа.
В следующем примере значение 10 будет помещено в узел 'txt', дочерний элемент 'example'.Вместо этого я хочу, чтобы значение 10 было сохранено в узле 'example.txt'.
ptree pt;
pt.put("example.txt", 10);
Как я могу использовать полное имя файла для одного узла?
Заранее спасибо за вашу помощь!
Решение 2
Проблема заключалась в том, что документация устарела.Объект типа path должен быть создан следующим образом, с другим символом, который недопустим для путей к файлам, указанным в качестве разделителя следующим образом:
pt.put(boost::property_tree::ptree::path_type("example.txt", '|'), 10);
Я нашел путь к решению из списка рассылки boost в группе новостей gmane.comp.lib.boost.devel, опубликованной Филиппом Воше.
Другие советы
Просто вставьте дерево явно:
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");
Между прочим, я никогда раньше в своей жизни не пользовался этим классом.Я получил всю эту информацию прямо со страницы, на которую вы ссылались ;)