Увеличьте дерево свойств с именем файла в качестве ключа

StackOverflow https://stackoverflow.com/questions/1948745

  •  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");

Между прочим, я никогда раньше в своей жизни не пользовался этим классом.Я получил всю эту информацию прямо со страницы, на которую вы ссылались ;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top