【问题标题】:Is there some common way to write and read config files?是否有一些常用的方法来编写和读取配置文件?
【发布时间】:2011-02-08 22:55:09
【问题描述】:

我需要我的程序创建和编辑一个配置文件,该文件将包含有关一组对象的信息,然后在每次执行时读取它。我可以使用某种配置样式指南吗?

我在 Windows 上使用 C++。

【问题讨论】:

  • 您想存储什么语言和什么,字符串或真实对象的转储,如 gui 元素、具有复杂结构的对象等?

标签: c++ configuration configuration-files


【解决方案1】:

最常见的格式是INI File 格式。大多数 mdoern 语言应该有内置的东西来处理这些,否则我相信你可以找到第三方库。

如果做不到这一点,您可以使用 XML,如果您的语言支持它,则可以对这些 XML 文件进行序列化和反序列化。如果您不想/不能使用 XML,大多数语言都会有他们使用的默认格式,例如对象中数据的纯二进制转储。

【讨论】:

  • 10 年前最常见的。事情发生了一些变化。 XML、YAML 和 JSON 是现在要走的路。
【解决方案2】:

YAML 是一种非常流行的用于创建配置文件的解决方案。例如,Ruby on Rails 和 Google AppEngine 主要使用它。 YAML 库可用于许多(如果不是大多数)语言。

【讨论】:

    【解决方案3】:

    在 Java 世界中,属性文件非常易于使用: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html Properties 类表示一组持久的属性。属性可以保存到流中或从流中加载。属性列表中的每个键及其对应的值都是一个字符串。

    正如其他人所说,您需要描述您的环境以获得最佳推荐。

    【讨论】:

      【解决方案4】:

      这在很大程度上取决于配置文件的语言、平台和范围。例如 Java 世界中的 properties files 用于配置,还有其他已经在这里提到的,例如 YAML。

      XML 通常不适合用于配置,因为它非常冗长。您仍然可以在许多应用程序、Web 框架等中找到它。

      我认为最佳做法是为手头的工作选择正确的配置格式。您可以自己评估和尝试它们,同时考虑以下几点:

      1. 标准是什么? (例如 Windows 中的 ini 文件,Java 中的属性文件)
      2. 我的语言是否有本机支持,还是我必须推出自己的实现?
      3. 我的配置格式能否轻松描述我想要存储为配置的内容?

      我相信您可以考虑其他因素。如果您更新问题以阐明范围,您将获得更多有用的答案。

      【讨论】:

        【解决方案5】:

        我建议查看boost::property_tree

        Property Tree 库提供了一种数据结构,用于存储任意深度嵌套的值树,并在每个级别通过某个键进行索引。树的每个节点都存储自己的值,以及其子节点及其键的有序列表。树允许通过路径轻松访问其任何节点,路径是多个键的串联。

        此外,它还包含 XML、INI 和 JSON 的解析器和生成器,因此您可以以您选择的格式保存/加载。

        【讨论】:

          【解决方案6】:

          如果您正在使用 Qt(基于您的其他问题),

          查看 QSettings 类。我一直在使用它们来设置很多持久性信息,例如上次访问的目录,以及上次使用的选项。

          【讨论】:

            【解决方案7】:

            boost::program_options 具有读取 ini 文件的能力。

            很好的是允许统一读取ini文件和命令行选项。就 Windows 程序而言,这可能不会被视为如此有趣的未来,但对于我的 unix 应用程序来说,这是一个杀手级功能。

            但是,boost::po 不允许编辑或写入 ini 文件,因此使用 boost::property_tree 可能会更好。

            【讨论】:

              【解决方案8】:

              有一个免费的、跨平台的配置文件管理库,称为 libconfig。它支持非常好的基于 Yaml 的语法,也支持用户定义的语法。它还具有许多其他计算语言绑定。查看它的主页:http://www.hyperrealm.com/libconfig/.

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-09-25
                • 2012-08-18
                • 2023-04-07
                • 1970-01-01
                • 2017-02-18
                • 1970-01-01
                • 2010-11-09
                相关资源
                最近更新 更多