C++ 应用程序设置方法?c++;

C++ 应用程序设置方法?c++;,c++,visual-c++,settings,appsettings,application-settings,C++,Visual C++,Settings,Appsettings,Application Settings,我正在考虑将可配置设置添加到应用程序中,我认为最简单的方法是使用外部文件或win注册表(这是一个win-only应用程序) 哪种方式更好? 我想知道,没有足够权限的用户可能无法创建/写入配置文件。就注册表而言,今天的防病毒软件是否允许我添加/编辑/删除密钥?或者他们只监视某些键 另外,如果有人知道在vc++中管理配置设置(在纯win32中)的类/库,请将其发布。我认为新的默认做法是在用户文件夹下的用户“AppData”文件夹中写入一个配置文件,该文件应该可以安全地写入/读取 我们使用一个简单的X

我正在考虑将可配置设置添加到应用程序中,我认为最简单的方法是使用外部文件或win注册表(这是一个win-only应用程序)

哪种方式更好?

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


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

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


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

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

据我所知:

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

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

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

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

哪条路更好

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

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


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

仅限Windows是限制还是解除限制?如果你不介意跨平台,那么我建议你试一试。该库通过命令行、环境变量和INI文件支持程序选项。Boost的
程序_选项
还将各种解析器与
变量_映射
完美地集成和粘合在一起,您可以将其视为选项与其值之间的映射。

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

如果您最终选择了文件路径,我建议您使用Boost的属性树库:

它有一个非常好的语法:

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);
boost::property\u tree::ptree属性;
std::string name=properties.get(“blah.name”);
int score=properties.get(“blah.score”);
properties.put(“blah.name”、“Inverse”);
属性。put(“blah.score”,1000);

它还支持读取和写入各种格式,如xml和其他格式。

+1:“我认为文本文件更好,允许更轻松地迁移设置”对于生产应用程序,这是一个非常重要的考虑因素。可以导出和导入注册表配置单元,但用户通常不了解这一点,您可能不希望他们在注册表上捣乱。这还取决于您将要使用的语言。纯C++不提供注册表支持。你在读和写文本文件时陷入了困境。是的,您可以轻松地打开它们,但是如果您需要处理大量设置,那么解析和查找值就变成了一个PITA。如果您可以访问Win32/MFC/COM等,我强烈建议您使用注册表。它非常容易读/写,只需要几行代码。将其封装在一个类中,您就得到了一个非常优雅的可重用解决方案。