【问题标题】:The Best way of storing/retrieving config data in Modern Windows在现代 Windows 中存储/检索配置数据的最佳方式
【发布时间】:2011-02-19 15:26:34
【问题描述】:

我最近没有为 Windows 编写太多代码,我发现自己现在正坐在 Visual Studio 中,用 C++ 为 Windows 7 编写一个小程序。我需要读取/写入一些配置数据。

在过去,(作为一个 Borland 人)我只是使用 TIniFile 并将 .ini 保留在我的 exe 旁边显然这不再是完成的事情了。 MS 文档告诉我 Get/WritePrivateProfileString 仅用于兼容性,我怀疑这些天我是否会摆脱写入 Program Files 的问题。天哪,我感觉自己老了。

我希望生成的文件易于编辑 - 在记事本中打开,并且易于查找。这是一个小应用程序,当我可以编辑配置文件时,我不想编写设置屏幕。

那么,现代的做法是什么?

【问题讨论】:

标签: c++ windows-7


【解决方案1】:

人们经常使用 XML 文件来存储首选项,但它们往往是多余的(而且它们实际上对人类来说并不是那么可读)。

如果 INI 文件可以轻松满足您的需求,您可能希望使用 Boost.Program_options 使用配置文件解析器后端,它实际上编写类似 INI 的文件,而无需通过已弃用(而且速度很慢!)的 API,同时公开一个不错的 C++ 接口。

正确的关键是在哪里编写这样的配置文件。正确的位置通常是用户应用程序数据目录的子目录(例如命名为您的应用程序);拜托,拜托,拜托,不要在可执行文件中对其路径进行硬编码,我已经看到足够多的损坏的应用程序无法理解用户配置文件可能不在 @987654324 中@。

相反,您可以使用SHGetFolderPath 函数和CSIDL_APPDATA(或SHGetKnownFolderPathFOLDERID_RoamingAppData,如果您不介意失去与Vista 之前的Windows 版本的兼容性,甚至可以检索应用程序数据路径)只是扩展%APPDATA% 环境变量)。

通过这种方式,每个用户都可以存储其首选项,并且您在编写首选项时不会遇到任何与安全相关的错误。

【讨论】:

  • 另一个选项是让用户选择存储配置文件的位置。然后您可以将该位置保存在注册表中。如果您不是该程序的唯一用户,这可能会帮助他们找到要编辑的配置文件。内容本身仍然可以是 ini 文件。 现代方式可能是编写配置屏幕并将其存储在 Windows 注册表中。
  • 谢谢你 - 提升链接看起来像我所追求的。我记得 SHGetFolderPath 的时候 - 我在 dos -> win3.1 -> windows 95 时代完成了我的大部分 Windows 编码,并且在硬编码方面遭受了很大的痛苦。
【解决方案2】:

这是我的意见(我认为你得到的大部分答案都是意见),但现在的标准做法似乎是将这些配置文件存储在C:\Users\<Username> 中。此外,最好不要让这个目录本身混乱,而是使用一个子目录来存储应用程序的数据,例如C:\Users\<Username>\AppData\Roaming\<YourApplicationName>。单个配置文件可能有点过头了,但如果您添加更多数据,这将使您有机会将所有应用程序数据放在一个地方。

【讨论】:

  • 我建议的路径是 %APPDATA%,但正如 Matteo 所回答的,您应该动态获取它而不是硬编码它。
猜你喜欢
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
相关资源
最近更新 更多