Дерево Свойства повышения с именем файла как ключ

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

Однако '.' символ в имени файла, таком как "example.txt" заставляет дополнительный слой быть добавленным в дереве свойства. Самое очевидное решение состояло бы в том, чтобы заменить '.' другим символом, но там вероятно лучший способ сделать это, такой как с символом ESC.

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

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

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

Заранее спасибо за Вашу справку!

11
задан Andrew Hundt 22 December 2009 в 19:56
поделиться

2 ответа

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

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

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

8
ответ дан 3 December 2019 в 06:21
поделиться

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

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

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

.
11
ответ дан 3 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: