Увеличить дерево свойств с именем файла в качестве ключа - PullRequest
10 голосов
/ 22 декабря 2009

Я пытаюсь использовать имена файлов в качестве ключа в boost :: PropertyTree

Однако, «.» Символ в имени файла, такой как «example.txt», вызывает добавление дополнительного слоя в дереве свойств. Наиболее очевидным решением будет заменить «.» с другим персонажем, но, вероятно, есть лучший способ сделать это, например, с помощью escape-символа.

В следующем примере значение 10 будет помещено в узел 'txt', дочерний элемент 'example'. Вместо этого я хочу, чтобы значение 10 сохранялось в узле example.txt.

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

Как использовать полное имя файла для одного узла?

Заранее спасибо за помощь!

Ответы [ 2 ]

10 голосов
/ 22 декабря 2009

Просто вставьте дерево явно:

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

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

7 голосов
/ 17 февраля 2010

Проблема была в том, что документация устарела. Объект типа пути должен быть создан следующим образом, с другим символом, который недопустим для путей к файлам, указанным в качестве разделителя, следующим образом:

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

Я нашел путь к решению из списка рассылки поддержки в новостной группе gmane.comp.lib.boost.devel, опубликованной Филиппом Ваучером.

...