¿Cuál es una forma bastante estándar para almacenar la configuración de la aplicación, principalmente para Windows, pero también es fácil de trasladar a otras plataformas.Configuración de la aplicación
Hay básicamente 4 grupos de ajustes que desea tener:
- configuración global, afecta a todos los usuarios, y se puede mover entre máquinas
- configuración global del sistema, afecta a todos los usuarios, pero adaptadas a ese sistema (por ejemplo, valores por defecto para ese sistema, por ejemplo, opciones gráficas)
- configuración de usuario, la configuración del usuario que se mueven entre los sistemas (por ejemplo, el sonido de volumen)
- la configuración del sistema del usuario, la configuración de usuario específico de dicho sistema (por ejemplo, opciones gráficas que son dependiente del hardware)
Cada nivel anula el nivel anterior, permitiendo que las "configuraciones globales" sean más grandes que las aplicaciones predeterminadas, con ajustes de usuario que almacenan las opciones que el usuario eligió. Los dos primeros básicamente serán predeterminados cuando no haya configuración de usuario (por ejemplo, para un nuevo usuario).
Consideré la implementación de un conjunto de funciones, que luego pude implementar para los diferentes sistemas (probablemente a través de archivos ini), pero ¿es esta la mejor manera?
(C++)
namespace config
{
void Init(const std::string &AppName);
//updates config for keys/sections that don't exist (ie don't overwrite changes by advanced users by rewriting the entire file)
void Defaults (std::map<std::string,std::map<std::string,std::string> > &Map);
void SystemDefaults (std::map<std::string,std::map<std::string,std::string> > &Map);
void Set (const std::string &Section, const std::string &Key, const std::string &Value);
void SetSystem (const std::string &Section, const std::string &Key, const std::string &Value);
void SetUser (const std::string &Section, const std::string &Key, const std::string &Value);
void SetUserSystem (const std::string &Section, const std::string &Key, const std::string &Value);
std::string GetValue (const std::string &Section, const std::string &Key);
}
Sé que las ventanas tiene un conjunto de directorios para este tipo de configuración, pero éstos son los directorios correctos para mis necesidades?
EDITAR: Prefiero ir con archivos (ini o xml), en lugar de utilizar, por ejemplo, el registro de Windows. Sin embargo, ¿dónde están los mejores lugares para poner estos archivos de configuración en cada sistema operativo?
En Vista, encontré estos, que parecen ajustarse a mis grupos, sin embargo, ¿qué pasa con las versiones anteriores de Windows (necesito compatibilidad con win2000, XP, etc.) y mac/linux tiene sus propias carpetas simelar?
- ajustes globales - <SYSDRIVE> \ Users \ Default \ AppData \ Roaming
- configuración del sistema global - <SYSDRIVE> \ Users \ Default \ AppData \ Local
- Configuración de usuario - <SYSDRIVE> \ Users \ <uSUARIO> \ AppData \ Roaming configuración del sistema
- usuario - <SYSDRIVE> \ Users \ <uSUARIO> \ AppData \ local
Los archivos Well son mi preferido, ya que las mismas cosas funcionarán en todas las plataformas con poco trabajo. El principal problema es dónde deberían estar los archivos y cómo proporcionar una interfaz limpia (por ejemplo, Microsoft no parece querer aplicaciones trabajando con archivos en el propio directorio de aplicaciones ... id esté contento con% username% .ini). –