2010-05-27 82 views
2

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

哪种方式会更好?

我想知道,没有足够权限的用户可能无法创建/写入配置文件。而在注册表的情况下,今天防病毒允许我添加/编辑/删除密钥?或者他们只监视某些键?另外,如果有人知道类/ lib来管理vC++中的配置设置(在纯win32中),请发布它。

回答

5

据我所知:

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

你应该能够让内部用户的“家庭档案目录“或”应用程序数据“目录,无论权限如何。通常这些目录应该是可写的。

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

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

哪种方式会更好?

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

另外,如果有人知道一个类/ lib目录来管理VC配置设置++

中的Qt 4。但使用Qt的全部只是保存设置QSettings绝对是矫枉过正。你也可以检查JSON等配置语言,使用lua进行设置(比使用Qt 4更少矫枉过正)或者获取任何XML库。另外,直接使用注册表或使用iostreams或stdio编写配置文件不应该很难。如果你喜欢它,你可以随时编写自己的配置库。

+0

+1:“我认为文本文件更好 - 允许更轻松地迁移设置”对于生产应用程序,这是非常重要的考虑因素。可以导出和导入注册表配置单元,但用户通常不会得到这些信息,而且您可能不希望他们混淆注册表 – 2010-05-27 16:33:13

+0

这还取决于您要使用的语言。纯C++不提供注册表支持。阅读和编写文本文件都很困难。是的,你可以轻松地打开它们,但是如果你有大量的设置需要处理,解析和寻找值将成为PITA。 如果你有访问Win32/MFC/COM等,我会强烈建议去注册表。读取/写入操作非常简单,只需要几行代码。封装在一个类中,你有一个非常优雅的可重用解决方案。 – Justin 2010-05-27 16:39:07

0

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

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

0

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

2

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

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