存储设置的最佳做法
Best practices for storing settings
我有一个相当大的C++应用程序(在Windows上,没有计划其他平台),它目前将所有设置(甚至是某种地址)存储在Windows注册表中。
有时这很不方便,因为用户很难更改注册表中的条目。我想对设置进行版本控制,以便设置始终与当前代码匹配。目前我们对 reg-files 进行版本控制,但您永远不确定是否所有 reg-file 都已添加到目标计算机上。使用 C#,可以在 app.config 中定义默认值,但不要覆盖现有设置。我不知道,C++是否存在这样的机制或库。
我希望有以下"功能":
- 可以对设置进行版本控制
- 目标计算机上的简单更新(可由用户完成)
- 确保在更新时仅添加新设置,并且不会用默认值覆盖现有设置
- 用户设置的简单更改 Win
- XP 和 Win 7 下的工作流程相同
据我所知,有 3 种可能性可以在 Windows 上存储设置:
- 注册表
- 伊尼文件
- XML 文件
目前,我们套件中只有一个应用程序使用Qt,但Boost将可用。
对于地址,我们会将它们放在某种 XML 地址簿中,但对于其他设置,我们不确定最佳做法是什么。
正如评论所提到的,基于树的键/值结构是一种常见的解决方案,库很容易找到。
Boost的property_tree是一个很好的选择,因为它经过了良好的测试,可以很容易地导出为XML或JSON。
关于您的要求:
- 可以对设置进行版本控制
是的! 使"版本"成为顶级键。 使其易于与其他版本进行比较。
您还可以将设置分类为各种树节点,并为每个节点提供一个版本。
- 目标计算机上的简单更新(可由用户完成)
让您的应用程序在运行时执行此操作。 见下文。
- 确保在更新时仅添加新设置,并且不会用默认值覆盖现有设置
- 用户设置的简单更改
Win- XP 和 Win 7 下的工作流程相同
当设置从一个版本更改为另一个版本时,这些更改通常分为三类。 需要新属性,放弃旧设置,并且某些设置会更改其预期格式。 例如,"32 华氏度"变为"0 摄氏度"
当应用程序初始化时:
- 加载现有配置文件,而不考虑其版本。
- 如果版本与应用程序的当前版本不匹配:
- 为新配置创建新的空白属性树
- 对于树中的每个节点,如果旧文件的树中没有此设置,请使用一组预期的属性名称,以及一个函数指针或类似名称来获取此设置。 如果设置更改了其格式,请为其指定新名称。
- 在旧树中搜索每个设置,如果找到,则复制它,如果未找到,则使用提供的函数的结果。
- 保存新的设置文件。
您的"缺失设置"功能可以:
- 返回常量默认值。
- 在树中查询其他设置并转换它(如果也找不到旧设置,则使用默认值)
- 询问用户
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 哪个是设置位的最佳方法以及为什么?
- 最佳 PCL 模板对齐设置
- 将超时值设置为套接字轮询/选择的最佳实践是什么?
- 设置带有布尔值的比特集的最佳方法
- 最佳的c++方式来随机选择设置位在位集中的位置
- 存储设置的最佳做法
- 设置(属性)类的单个/多个成员的最佳做法
- 在Qt Quick中设置/读取UI值的最佳方式是什么
- Visual C++项目:最佳单元测试设置
- 在联合中设置字段位的最佳方法
- 设置"深度"配置选项的最佳方法是什么?
- 在opencvc++中设置图像区域为零的最佳方法
- 在自动化服务部署时设置用户服务运行的最佳实践是什么?
- 将cv::Scalar的值设置为opencv中cv::Mat中的一个像素的正确(最佳)方法是什么?
- 在语句中设置条件检查格式"if"最佳方法
- 在c++中设置较低层次私有字段的最佳实践
- 阅读应用程序设置最佳实践