应用程序设置

什么是存储应用程序设置的一个相当标准的方法,主要用于Windows,但也容易移动到其他平台。

基本上有4组我想要的设置:

  • 全局设置,影响所有用户,并可能在机器之间移动
  • 全局系统设置,影响所有用户,但是特定于该系统(例如,该系统的默认设置,例如graphics选项)
  • 用户设置,在系统之间移动的用户设置(例如音量)
  • 用户系统设置,特定于该系统的用户设置(例如,与硬件相关的graphics选项)

每个级别都会覆盖以前的级别,允许应用程序默认的“全局设置”变得更大,用户设置存储用户select的选项。 前两个基本上是没有用户设置的默认值(例如,对于新用户)。

我考虑实现一套function,然后我可以实现不同的系统(可能是通过ini文件),但这是最好的方法吗?

(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); } 

我知道windows有这样的设置的目录,但这些是我的需要正确的dirs?

编辑:我宁愿去与文件(ini或xml),而不是使用说窗户注册。 然而wheres最好的地方把这些configuration文件在每个操作系统下?

在Vista下,我发现这些,这似乎适合我的团体,然而什么更旧的Windows版本(我需要支持WIN2000,XP等),并没有Mac / Linux有自己的simelar文件夹?

  • 全局设置 – <SYSDRIVE> \ Users \ Default \ Appdata \ Roaming
  • 全局系统设置 – <SYSDRIVE> \ Users \ Default \ Appdata \ Local
  • 用户设置 – <SYSDRIVE> \ Users \ <USER> \ AppData \ Roaming
  • 用户系统设置 – <SYSDRIVE> \ Users \ <USER> \ AppData \ Local

如果你是一个boost用户,你可以看看程序选项库,它支持使用配置文件以及环境变量和(当然)命令行选项。

它的设计是便携式的,所以应该缓解你的跨平台的麻烦。

另请参见跨平台应用程序应该在哪里保存数据?

有(至少)三个合理的选择:

注册表:这是我最不喜欢的,因为可移植性和相对不透明度。

环境变量:我建议使用一个(只有一个)指向你的材料保存的地方 – 一个“安装目录”或一些这样的。

文件:一个/用户主目录(或其子目录)和项目/产品目录都适用于存储事物。

您可能想要使用简单的关键字=值范例,以及基本规则,以便您的变量 – 设置 – 可以非常容易地被多种类型的代码读取。 例如,我通常使用属性文件的Java范例,并使用匹配的行为C代码,这样我的代码行就可以轻松读取设置。