什么是存储应用程序设置的相当标准的方法,主要用于Windows,但也很容易移动到其他平台。
我基本上有4组设置:
每个级别都会覆盖以前的级别,允许“全局设置”使应用程序默认值更大,用户设置存储用户选择的选项。 前两个基本上是默认设置,没有用户设置(例如,对于新用户)。
我考虑过实现一组函数,然后我可以为不同的系统实现(可能是通过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有一组用于此类设置的目录,但这些是否符合我的需求?
编辑:我宁愿选择文件(ini或xml),而不是使用windows注册表。但是,在每个操作系统下放置这些配置文件的最佳位置是什么?在Vista下我找到了这些,这似乎适合我的团队,但是旧的Windows版本(我需要支持win2000,XP等),并且mac / linux有自己的simelar文件夹吗?
答案 0 :(得分:6)
如果您是boost用户,可以查看program options库,它支持使用配置文件以及环境变量和(当然)命令行选项。
它设计为便携式,因此可以减轻您的跨平台问题。
答案 1 :(得分:3)
答案 2 :(得分:1)
(至少)有三个合理的选择:
注册表:由于便携性和相对不透明性,这是我最不喜欢的。
环境变量:我建议使用一个(只有一个)指向保存材料的地方 - “安装目录”或其他一些。
文件:/ user-home目录(或其子目录)和项目/产品目录都适合存储。
您可能希望使用简单的keyword = value范例和基本规则,以便您的变量 - 设置 - 可以非常轻松地由多种类型的代码读取。例如,我通常使用属性文件的Java范例并使用匹配的行为C代码,因此我的代码行都可以轻松读取设置。