什么是存储应用程序设置的一个相当标准的方法,主要用于Windows,但也容易移动到其他平台。
基本上有4组我想要的设置:
每个级别都会覆盖以前的级别,允许应用程序默认的“全局设置”变得更大,用户设置存储用户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文件夹?
如果你是一个boost用户,你可以看看程序选项库,它支持使用配置文件以及环境变量和(当然)命令行选项。
它的设计是便携式的,所以应该缓解你的跨平台的麻烦。
另请参见跨平台应用程序应该在哪里保存数据?
有(至少)三个合理的选择:
注册表:这是我最不喜欢的,因为可移植性和相对不透明度。
环境变量:我建议使用一个(只有一个)指向你的材料保存的地方 – 一个“安装目录”或一些这样的。
文件:一个/用户主目录(或其子目录)和项目/产品目录都适用于存储事物。
您可能想要使用简单的关键字=值范例,以及基本规则,以便您的变量 – 设置 – 可以非常容易地被多种类型的代码读取。 例如,我通常使用属性文件的Java范例,并使用匹配的行为C代码,这样我的代码行就可以轻松读取设置。