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