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