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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top