【发布时间】:2011-02-08 22:55:09
【问题描述】:
我需要我的程序创建和编辑一个配置文件,该文件将包含有关一组对象的信息,然后在每次执行时读取它。我可以使用某种配置样式指南吗?
我在 Windows 上使用 C++。
【问题讨论】:
-
您想存储什么语言和什么,字符串或真实对象的转储,如 gui 元素、具有复杂结构的对象等?
标签: c++ configuration configuration-files
我需要我的程序创建和编辑一个配置文件,该文件将包含有关一组对象的信息,然后在每次执行时读取它。我可以使用某种配置样式指南吗?
我在 Windows 上使用 C++。
【问题讨论】:
标签: c++ configuration configuration-files
最常见的格式是INI File 格式。大多数 mdoern 语言应该有内置的东西来处理这些,否则我相信你可以找到第三方库。
如果做不到这一点,您可以使用 XML,如果您的语言支持它,则可以对这些 XML 文件进行序列化和反序列化。如果您不想/不能使用 XML,大多数语言都会有他们使用的默认格式,例如对象中数据的纯二进制转储。
【讨论】:
YAML 是一种非常流行的用于创建配置文件的解决方案。例如,Ruby on Rails 和 Google AppEngine 主要使用它。 YAML 库可用于许多(如果不是大多数)语言。
【讨论】:
在 Java 世界中,属性文件非常易于使用: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html Properties 类表示一组持久的属性。属性可以保存到流中或从流中加载。属性列表中的每个键及其对应的值都是一个字符串。
正如其他人所说,您需要描述您的环境以获得最佳推荐。
【讨论】:
这在很大程度上取决于配置文件的语言、平台和范围。例如 Java 世界中的 properties files 用于配置,还有其他已经在这里提到的,例如 YAML。
XML 通常不适合用于配置,因为它非常冗长。您仍然可以在许多应用程序、Web 框架等中找到它。
我认为最佳做法是为手头的工作选择正确的配置格式。您可以自己评估和尝试它们,同时考虑以下几点:
我相信您可以考虑其他因素。如果您更新问题以阐明范围,您将获得更多有用的答案。
【讨论】:
我建议查看boost::property_tree。
Property Tree 库提供了一种数据结构,用于存储任意深度嵌套的值树,并在每个级别通过某个键进行索引。树的每个节点都存储自己的值,以及其子节点及其键的有序列表。树允许通过路径轻松访问其任何节点,路径是多个键的串联。
此外,它还包含 XML、INI 和 JSON 的解析器和生成器,因此您可以以您选择的格式保存/加载。
【讨论】:
如果您正在使用 Qt(基于您的其他问题),
查看 QSettings 类。我一直在使用它们来设置很多持久性信息,例如上次访问的目录,以及上次使用的选项。
【讨论】:
boost::program_options 具有读取 ini 文件的能力。
很好的是允许统一读取ini文件和命令行选项。就 Windows 程序而言,这可能不会被视为如此有趣的未来,但对于我的 unix 应用程序来说,这是一个杀手级功能。
但是,boost::po 不允许编辑或写入 ini 文件,因此使用 boost::property_tree 可能会更好。
【讨论】:
有一个免费的、跨平台的配置文件管理库,称为 libconfig。它支持非常好的基于 Yaml 的语法,也支持用户定义的语法。它还具有许多其他计算语言绑定。查看它的主页:http://www.hyperrealm.com/libconfig/.
【讨论】: