3

我正在考虑向应用程序添加可配置设置,我认为最简单的方法是外部文件或 win 注册表(它是一个仅限 win 的应用程序)。

哪种方式会更好?

我想知道,没有足够权限的用户可能无法创建/写入配置文件。在注册表的情况下,今天的防病毒软件是否允许我添加/编辑/删除密钥?或者他们只监控某些键?

此外,如果有人知道在 vc++ 中管理配置设置(在纯 win32 中)的类/库,请发布。

4

5 回答 5

5

据我所知:

没有足够权限的用户可能无法创建/写入配置文件

无论权限如何,您都应该能够在用户的“主目录”或“应用程序数据”目录中创建文件。通常这些目录应该是可写的。

今天的防病毒软件允许我添加/编辑/删除密钥吗?

从未见过我的防病毒软件会干扰注册表操作。只要您没有在注册表中做任何可疑的事情,您可能会没事的。

哪种方式会更好?

这是品味的问题。我认为文本文件更好 - 允许更轻松地迁移设置。只是不要在卸载后留下垃圾。

另外,如果有人知道一个类/库来管理 vc++ 中的配置设置

Qt 4 中的QSettings。但是使用整个 Qt 来保存设置绝对是一种矫枉过正的做法。您还可以检查 JSON 之类的配置语言,使用 lua 进行设置(比使用 Qt 4 更少过度杀伤力)或获取任何 XML 库。此外,直接使用注册表或使用 iostreams 或 stdio 编写配置文件应该不难。而且您可以随时编写自己的配置库——如果您愿意的话。

于 2010-05-27T15:53:46.630 回答
2

“仅限 Windows”是限制还是限制解除?如果您不介意跨平台,那么我建议您试一试boost::program_options。该库通过命令行、环境变量和 INI 文件支持程序选项。Boostprogram_options还很好地集成和粘合了各种解析器variables_map,您可以将其视为选项及其值之间的映射。

于 2010-05-27T16:58:22.993 回答
1

对于简单的东西,您不妨只使用注册表。但是,配置文件有很多好处……您可以为应用程序的不同用途保存/加载几个不同的配置,更容易在用户或机器之间共享或迁移设置等。

如果您最终选择文件路径,我会推荐 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 等。

于 2010-05-27T17:05:16.580 回答
0

我认为新的默认设置是在用户文件夹下的用户“AppData”文件夹中写入一个配置文件,该文件夹应该可以安全地写入/读取。

我们使用一个简单的 XML 格式文件来存储设置;但您可以使用 INI 文件类型格式。

于 2010-05-27T15:50:48.257 回答
0

如果您将配置文件保存在 Application Data 目录SHGetFolderPath()中,CSIDL_COMMON_APPDATA所有用户都将能够看到该配置。如果您使用CSIDL_LOCAL_APPDATA,那么只有一个用户才能看到配置。注册表不一定是保存所有配置数据的地方。

于 2010-05-27T15:51:50.377 回答