我有一个相当大的C ++应用程序(在Windows上,计划没有其他平台),目前保存在Windows注册表中的所有设置(甚至某种地址)。
有时候,这是不方便的,因为用户必须更改注册表项的困难。 我想有版本的设置,因此设置始终是当前的代码相匹配。 目前,我们的版本REG-文件,但你永远不能肯定的是,如果所有REG-文件已在目标计算机上添加。 用C#,你可以在App.config中定义的默认值,但不会覆盖现有的设置。 我不知道,如果这样的机制或图书馆存在C ++。
我想有下面的“功能”:
- 设置可以版本
- 在目标计算机上简单的更新(用户可自行完成)
- 确保在更新只添加了新的设置,并没有现成的设置与默认值覆盖
- 为用户设置简单的变化
- 在Win XP和Win 7相同的工作流程
据我所见,有3种可能性来存储Windows设置:
只有一个应用我们的套件的使用Qt的时刻,但加速将是可用的。
对于地址,我们将它们放在某种XML地址簿,但对于其他设置,我们不知道,什么是最好的做法。
正如评论提到,基于树的键/值结构是一个常见的解决方案和库很容易找到。
升压的property_tree是一个很好的选择,因为它是良好测试并且可以容易地导出为XML或JSON
关于你的要求:
是! 制作“版”的顶级键。 使其易于与其他版本相媲美。
您也可以归类设置成不同的树节点,给每个节点的版本。
让你的应用程序一样,它运行时。 见下文。
- 确保在更新只添加了新的设置,并没有现成的设置与默认值覆盖
- 为用户设置简单的变化
- 在Win XP和Win 7相同的工作流程
由于设置从一个版本到另一个改变,通常这些变化可以分为三类。 新的特性需要,旧的设置被遗弃,有的设置改变他们的预期的格式。 例如“32华氏”变为“0摄氏”
当你的应用程序初始化:
- 加载现有的配置文件,无论其版本。
- 如果版本不匹配,什么是对应用电流:
- 新配置创建一个新的空白属性树
- 对于树中的每个节点上,有一组预期的属性名称,以及函数指针或类似的得到这个设定,如果是在旧文件的树缺席。 如果设置改变其格式,给它一个新的名字。
- 搜索在老树的每个设置,复制它,如果它的发现,并使用所提供的功能的结果,如果它不是。
- 保存新的设置文件。
您的“失踪设置”功能可以:
- 返回一个常量默认值。
- 查询树不同的设置,并将其转换(用默认值,如果旧的设置还是没有被找到)
- 询问用户