Aumente a árvore da propriedade com o nome do arquivo como chave
-
21-09-2019 - |
Pergunta
Estou tentando usar nomes de arquivos como a chave em Boost :: PropertyTree
No entanto, o '.' O caractere em um nome de arquivo como "exemplo.txt" faz com que uma camada adicional seja adicionada na árvore da propriedade. A solução mais óbvia seria substituir '.' Com outro personagem, mas provavelmente há uma maneira melhor de fazer isso, como com um personagem de fuga.
No exemplo a seguir, o valor 10 será colocado no nó 'txt', um filho de 'exemplo'. Em vez disso, quero que o valor 10 seja armazenado no nó 'exemplo.txt'.
ptree pt;
pt.put("example.txt", 10);
Como posso usar o nome completo do arquivo para um único nó?
Agradeço antecipadamente por sua ajuda!
Solução 2
O problema era que a documentação estava desatualizada. Um objeto de tipo de caminho deve ser criado da seguinte maneira, com outro personagem inválido para caminhos de arquivo especificados como o delimitador da seguinte forma:
pt.put(boost::property_tree::ptree::path_type("example.txt", '|'), 10);
Encontrei um caminho para a solução da lista de discussão no grupo de notícias gmane.comp.lib.boost.devel Publicado por Philippe Vaucher.
Outras dicas
Basta inserir a árvore explicitamente:
pt.push_back(ptree::value_type("example.txt", ptree(10)));
o put
O método está simplesmente lá para conveniência, e é por isso que ele analisa automaticamente .
como uma camada adicional. Construir o value_type explicitamente como eu mostrei acima evita esse problema.
Uma maneira alternativa de resolver o problema é usar um argumento extra em put
e get
, que muda o delímetro.
pt.put('/', "example.txt", "10");
pt.get<string>('/', "example.txt");
Para o registro, eu nunca usei essa aula antes na minha vida. Recebi todas essas informações diretamente da página para a qual você vinculou; )