2010-04-16 37 views
10

Necesito mi programa para crear y editar un archivo de configuración, que contendría información sobre un conjunto de objetos, y que lo leería en cada ejecución. ¿Hay algún tipo de guía para el estilo de configuración que pueda usar?¿Hay alguna forma común de escribir y leer archivos de configuración?

Estoy usando C++ en Windows.

+1

¿Qué idioma y qué le gustaría almacenar, cuerdas o volcado de objetos reales, como elementos de GUI, objetos con estructura complicada, etc.? – pajton

Respuesta

5

Depende en gran medida del idioma, la plataforma y el alcance de sus archivos de configuración. Hay, por ejemplo, el properties files en el mundo de Java para la configuración, y otros ya mencionados aquí, como YAML.

XML es generalmente mal visto para la configuración, ya que es muy detallado. Todavía lo encuentra en muchas aplicaciones, marcos web, etc.

Creo que la mejor práctica sería elegir el formato de configuración correcto para el trabajo en cuestión. Puede evaluarlos y probarlos por sí mismo, teniendo en cuenta estos indicadores:

  1. ¿Cuál es la norma? (por ejemplo, archivos ini en Windows, archivos de propiedades en Java)
  2. ¿Hay soporte nativo en mi idioma, o tengo que implementar mi propia implementación?
  3. ¿Puede mi formato de configuración describir fácilmente lo que quiero almacenar como configuración?

Estoy seguro de que podría pensar en otras consideraciones. Si actualiza su pregunta para aclarar el alcance, obtendrá más respuestas útiles.

2

El formato más común es el formato INI File. La mayoría de los lenguajes mdoern deberían tener algo incorporado para manejarlos, de lo contrario, estoy seguro de que podrías encontrar una biblioteca de terceros.

En este caso, podría usar XML, y si su idioma lo admite, serializar y deserializar desde estos archivos XML. Si no quiere/no puede usar XML, la mayoría de los idiomas tendrán un formato predeterminado que usen, como un vaciado binario puro de los datos en un objeto.

+1

* fue * el más común hace 10 años. Las cosas han cambiado un poco. XML, YAML y JSON son las formas de hacerlo ahora. – marzapower

5

YAML es una solución muy popular para crear archivos de configuración. Es usado prominentemente por Ruby on Rails y Google AppEngine, por ejemplo. Las bibliotecas YAML están disponibles para muchos idiomas, si no para la mayoría.

0

En el mundo de Java, un archivo de propiedades es bastante fácil de usar: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html La clase Propiedades representa un conjunto persistente de propiedades. Las propiedades pueden guardarse en una secuencia o cargarse desde una secuencia. Cada clave y su valor correspondiente en la lista de propiedades es una cadena.

Como han dicho los demás, necesitaría describir su entorno para obtener la mejor recomendación.

11

Recomiendo retirar boost::property_tree.

La biblioteca de Property Tree proporciona una estructura de datos que almacena un árbol de valores anidados profundamente anidados, indexados en cada nivel por alguna clave. Cada nodo del árbol almacena su propio valor, más una lista ordenada de sus subnodos y sus claves. El árbol permite un fácil acceso a cualquiera de sus nodos por medio de una ruta, que es una concatenación de múltiples claves.

Además, contiene analizadores y generadores para XML, INI y JSON, por lo que puede guardar/cargar en el formato de su elección.

3

Si está trabajando con Qt (en base a sus otras preguntas),

vistazo a la clase QSettings. He estado usando estos para establecer una gran cantidad de información persistente, como el último directorio visitado, y qué opciones se utilizaron por última vez.

3

boost :: program_options tiene cierta capacidad para leer archivos ini.

Lo que es bueno es que permite unificar la lectura de archivos ini y las opciones de línea de comandos. A medida que el programa de Windows va, puede que no se vea como un futuro tan interesante, pero para mi aplicación de Unix fue una característica clave.

Sin embargo, boost :: po no permite la edición o escritura de archivos ini, por lo tanto, probablemente será mejor con boost :: property_tree.

1

Hay una biblioteca gratuita multiplataforma para la administración de archivos de configuración, llamada libconfig. Admite una gramática basada en Yaml muy agradable y también admite la gramática definida por el usuario. También tiene muchas otras vinculaciones de lenguaje informático. Ver su página de inicio: http://www.hyperrealm.com/libconfig/.

Cuestiones relacionadas