Domanda

Sto cercando di usare nomi di file come chiave in boost :: PropertyTree

Tuttavia, il '' carattere in un nome di file come "example.txt" provoca uno strato aggiuntivo da aggiungere all'interno dell'albero struttura. La soluzione più ovvia sarebbe quella di sostituire '' con un altro personaggio, ma non v'è probabilmente un modo migliore per fare questo, come ad esempio con un carattere di escape.

Nel seguente esempio, il valore 10 verrà messo nel nodo 'txt', un bambino di 'esempio'. Invece, voglio che il valore 10 da memorizzare nel nodo 'example.txt'.

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

Come posso usare il nome completo del file per un singolo nodo?

Grazie in anticipo per il vostro aiuto!

È stato utile?

Soluzione 2

Il problema era che la documentazione è stata superata. Un oggetto tipo di percorso deve essere creato come segue, con un altro personaggio che non è valido per i percorsi di file specificato come delimitatore nel seguente modo:

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

Ho trovato un percorso per la soluzione dalla mailing list spinta al gmane.comp.lib.boost.devel newsgroup inviato da Philippe Vaucher.

Altri suggerimenti

Basta inserire l'albero in modo esplicito:

pt.push_back(ptree::value_type("example.txt", ptree(10)));

Il metodo put è semplicemente lì per comodità, è per questo che analizza automaticamente . come un ulteriore livello. Costruire il value_type esplicitamente come ho mostrato sopra evita questo problema.

Un modo alternativo per risolvere il problema è quello di utilizzare un argomento in più in put e get, che cambia il delimitatore.

pt.put('/', "example.txt", "10");
pt.get<string>('/', "example.txt");

Per la cronaca, non ho mai usato questa classe prima in vita mia. Ho avuto tutte queste informazioni direttamente dalla pagina si è collegato al; )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top