Boostez Arbre propriété avec nom de fichier comme clé
-
21-09-2019 - |
Question
Je suis en train d'utiliser les noms de fichiers comme la clé dans boost :: PropertyTree
Cependant, le '' caractère dans un nom de fichier tel que « exemple.txt » provoque une couche supplémentaire à ajouter dans l'arborescence de la propriété. La solution la plus évidente serait de remplacer « » avec un autre personnage, mais il y a probablement une meilleure façon de faire, comme avec un caractère d'échappement.
Dans l'exemple suivant, la valeur 10 sera mis dans le nœud « txt », un enfant de « exemple ». , Je veux plutôt que la valeur 10 à être stocké dans le noeud « exemple.txt ».
ptree pt;
pt.put("example.txt", 10);
Comment puis-je utiliser le nom de fichier complet pour un seul nœud?
Merci d'avance pour votre aide!
La solution 2
Le problème était que la documentation était pas à jour. Un objet de type de chemin doit être créé comme suit, avec un autre personnage qui est valide pour les chemins de fichiers spécifiés comme séparateur comme suit:
pt.put(boost::property_tree::ptree::path_type("example.txt", '|'), 10);
J'ai trouvé un chemin à la solution de la liste de diffusion de boost au gmane.comp.lib.boost.devel newsgroup posté par Philippe Vaucher.
Autres conseils
Il suffit d'insérer l'arbre explicitement:
pt.push_back(ptree::value_type("example.txt", ptree(10)));
La méthode put
est simplement là pour des raisons pratiques, ce qui est pourquoi il analyse automatiquement .
comme une couche supplémentaire. La construction du value_type explicitement comme je l'ai montré ci-dessus évite ce problème.
Une autre façon de résoudre le problème est d'utiliser un argument supplémentaire dans put
et get
, qui change délimiteur.
pt.put('/', "example.txt", "10");
pt.get<string>('/', "example.txt");
Pour mémoire, je ne l'ai jamais utilisé cette classe avant dans ma vie. Je suis toutes ces informations dès la page que vous lié à; )