应用设置方法? C ++

时间:2010-05-27 15:43:40

标签: c++ visual-c++ settings appsettings application-settings

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

哪种方式会更好?

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

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

5 个答案:

答案 0 :(得分:5)

据我所知:

  

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

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

  

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

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

  

哪种方式会更好?

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

  

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

Qt 4中的

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

如果你最终走了文件路线,我会推荐Boost的属性树库:

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和其他格式。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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