我正在考虑向应用程序添加可配置设置,我认为最简单的方法是外部文件或 win 注册表(它是一个仅限 win 的应用程序)。
哪种方式会更好?
我想知道,没有足够权限的用户可能无法创建/写入配置文件。在注册表的情况下,今天的防病毒软件是否允许我添加/编辑/删除密钥?或者他们只监控某些键?
此外,如果有人知道在 vc++ 中管理配置设置(在纯 win32 中)的类/库,请发布。
我正在考虑向应用程序添加可配置设置,我认为最简单的方法是外部文件或 win 注册表(它是一个仅限 win 的应用程序)。
哪种方式会更好?
我想知道,没有足够权限的用户可能无法创建/写入配置文件。在注册表的情况下,今天的防病毒软件是否允许我添加/编辑/删除密钥?或者他们只监控某些键?
此外,如果有人知道在 vc++ 中管理配置设置(在纯 win32 中)的类/库,请发布。
据我所知:
没有足够权限的用户可能无法创建/写入配置文件
无论权限如何,您都应该能够在用户的“主目录”或“应用程序数据”目录中创建文件。通常这些目录应该是可写的。
今天的防病毒软件允许我添加/编辑/删除密钥吗?
从未见过我的防病毒软件会干扰注册表操作。只要您没有在注册表中做任何可疑的事情,您可能会没事的。
哪种方式会更好?
这是品味的问题。我认为文本文件更好 - 允许更轻松地迁移设置。只是不要在卸载后留下垃圾。
另外,如果有人知道一个类/库来管理 vc++ 中的配置设置
Qt 4 中的QSettings。但是使用整个 Qt 来保存设置绝对是一种矫枉过正的做法。您还可以检查 JSON 之类的配置语言,使用 lua 进行设置(比使用 Qt 4 更少过度杀伤力)或获取任何 XML 库。此外,直接使用注册表或使用 iostreams 或 stdio 编写配置文件应该不难。而且您可以随时编写自己的配置库——如果您愿意的话。
“仅限 Windows”是限制还是限制解除?如果您不介意跨平台,那么我建议您试一试boost::program_options
。该库通过命令行、环境变量和 INI 文件支持程序选项。Boostprogram_options
还很好地集成和粘合了各种解析器variables_map
,您可以将其视为选项及其值之间的映射。
对于简单的东西,您不妨只使用注册表。但是,配置文件有很多好处……您可以为应用程序的不同用途保存/加载几个不同的配置,更容易在用户或机器之间共享或迁移设置等。
如果您最终选择文件路径,我会推荐 Boost 的 Property Tree 库:
http://www.boost.org/doc/libs/1_41_0/doc/html/property_tree.html
它有一个非常好的语法:
boost::property_tree::ptree properties;
std::string name = properties.get<std::string>("blah.name");
int score = properties.get<int>("blah.score");
properties.put("blah.name", "Inverse");
properties.put("blah.score", 1000);
它还支持读取和写入各种格式,如 xml 等。
我认为新的默认设置是在用户文件夹下的用户“AppData”文件夹中写入一个配置文件,该文件夹应该可以安全地写入/读取。
我们使用一个简单的 XML 格式文件来存储设置;但您可以使用 INI 文件类型格式。
如果您将配置文件保存在 Application Data 目录SHGetFolderPath()
中,CSIDL_COMMON_APPDATA
所有用户都将能够看到该配置。如果您使用CSIDL_LOCAL_APPDATA
,那么只有一个用户才能看到配置。注册表不一定是保存所有配置数据的地方。