应用程序设置
Application Settings
存储应用程序设置的一种相当标准的方式是什么,主要用于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文件夹吗?
- 全局设置-<SYSDRIVE>\Users\Default\Appdata\漫游
- 全局系统设置-<SYSDRIVE>\Users\Default\Appdata\Local
- 用户设置-<SYSDRIVE>\用户\<用户>\AppData\漫游
- 用户系统设置-<SYSDRIVE>\用户\<用户>\AppData\Local
如果你是boost用户,你可以看看程序选项库,它支持使用配置文件、环境变量和(当然)命令行选项。
它被设计为可移植的,因此应该可以缓解跨平台的头痛。
另请参阅跨平台应用程序应该在哪里保存数据?
至少有三种合理的选择:
注册表:这是我最不喜欢的,因为它的可移植性和相对不透明性。
环境变量:我建议使用一个(只有一个)指向保存材料的地方——"安装目录"或类似的东西。
文件:用户主目录(或其子目录)和项目/产品目录都适合存储东西。
您可能想要使用一个简单的keyword=value范式和基本规则,这样您的变量-设置-就可以很容易地被多种类型的代码读取。例如,我通常对属性文件使用Java范式,并使用匹配的行为C代码,这样我的两个代码行都可以轻松地读取设置。
相关文章:
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 我可以对 2 个或更多应用程序进行 QSettings 设置吗?
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 如何将从控制台应用程序C++回调设置为C++ COM DLL
- 使用代码在 AWS 开发工具包C++控制台应用程序上设置凭证
- 如何使用CMake在Windows上将应用程序入口点设置为main()C++?
- 为没有qmake/VS的Qt Windows应用程序设置.exe图标
- 如何在MFC对话框应用程序中默认将复选框设置为选中?
- 如何在C++应用程序中设置"Select Precision"光标?
- 如何在应用程序进行大量printf时,在固定输入的终端中设置最后一行
- 如何以编程方式设置应用程序EXE文件的图标
- 如何在OS X上的Qt应用程序中设置应用程序图标,足以进行分发
- 使用CMake设置应用程序图标
- 如何在Qt中设置应用程序图标
- 以编程方式设置应用程序的处理器相关性
- 没有找到为windows应用程序设置应用程序图标的问题.rc文件
- 如何在Mac上设置c++应用程序名称和图标
- 以程序方式设置应用程序的播放设备
- Qt5.6设置应用程序图标(Linux)