Pregunta

Estoy tratando de utilizar nombres de archivo como la clave en href="http://www.boost.org/doc/libs/1_41_0/doc/html/boost_propertytree/accessing.html" boost :: PropertyTree

Sin embargo, la ''. carácter en un nombre de archivo como "example.txt" provoca una capa adicional que se añade en el árbol de propiedades. La solución más obvia sería la de sustituir ''. con otro personaje, pero es posible que haya una mejor manera de hacer esto, por ejemplo, con un carácter de escape.

En el siguiente ejemplo, el valor 10 será puesto en el nodo 'txt', un niño de 'ejemplo'. En su lugar, quiero que el valor de 10 que se almacena en el nodo 'example.txt'.

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

¿Cómo puedo usar el nombre completo de un solo nodo?

Gracias de antemano por su ayuda!

¿Fue útil?

Solución 2

El problema era que la documentación era anticuado. Un objeto de tipo de ruta debe ser creado de la siguiente manera, con otro carácter que no es válido para las rutas de archivos especificados como delimitador de la siguiente manera:

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

He encontrado un camino a la solución de la lista de correo de impulso en el grupo de noticias gmane.comp.lib.boost.devel publicado por Philippe Vaucher.

Otros consejos

Sólo tiene que insertar el árbol explícitamente:

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

El método put es simplemente allí por conveniencia, por lo que analiza automáticamente . como una capa adicional. La construcción de la value_type explícitamente como he mostrado anteriormente evita este problema.

Una forma alternativa de resolver el problema es utilizar un argumento adicional en put y get, que cambia el delimitador.

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

Para el registro, nunca he utilizado esta clase antes en mi vida. Tengo toda esta información directamente desde la página se ha vinculado a; )

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top