Delphi中存储配置数据的选项有哪些?

4
我希望在Delphi项目中存储和加载各种程序数据。这些数据范围从简单的字符串到更复杂的重复配置对象数据。
众所周知,ini文件提供了一种快速而简便的存储程序数据的方法,但仅限于键值表示。
XML通常是处理此类需求的选择,但我想知道是否有替代XML的方法。
最近我发现了superobject,它似乎比XML更容易处理。对于这种“非Web任务”,使用JSON有什么需要注意的吗?
您是否知道其他支持以纯文本形式存储和加载数据(如ini、xml、json)的选项在Delphi中?

1
我个人使用YAML,但没有现成的解析器/发射器。否则,你列出了主要的候选项。 - David Heffernan
1
如果您从TComponent派生您的TConfig对象,那么您也可以使用VCL内置的流式传输机制(包括人类可读格式和二进制格式)。 - iamjoosy
1
@whosrdaddy 我个人认为手动阅读和编辑XML文件是一种可怕的体验..... ;-) - David Heffernan
4
实际上,选择哪种存储格式(ini、xml、json等)并不重要。构建一个通用的配置类来满足所有需求,然后考虑具体的类和存储格式,根据易于实现和可读性进行决策。 - Sir Rufo
二进制配置文件很糟糕,比XML还要糟糕。 - Warren P
显示剩余4条评论
2个回答

6
实际上,选择存储格式(ini、xml、json等)并不重要。首先构建一个抽象的配置类以适应所有需求,然后再考虑具体的类和具体的存储格式,并根据易于实现和可读性来决定。
在某些情况下,您可能还需要不同的配置方面(全局、机器、用户)。
使用您的配置类,您可以轻松混合它们在一起(如果没有用户定义,则使用全局),还可以混合存储格式(来自数据库的全局配置,来自注册表的机器配置,来自文件的用户配置)。

3

对我来说,老旧的INI文件与内置于IniFiles单元中的TIniFileTMemIniFile类相结合非常有效。

INI文件的好处:

  1. 非二进制。
  2. 比注册表设置更容易在机器之间移动。
  3. 易于检查和查看。
  4. 不像XML那样复杂,易于阅读。

  5. INI文件易于手动或通过工具修改,并且几乎是坚不可摧的。而JSON或XML很容易出现格式错误,难以阅读,而INI文件一般只会“损坏一个部分”。简单性胜出。

缺点:

  1. 与XML和注册表不同,它基本上只有“两个级别”,即节和项。

  2. TMemIniFile无法以任何可控的方式对结果进行排序。如果ini文件由人类生成,我经常希望能够控制项目的顺序,我希望顺序得到保留,但TMemIniFile不保留顺序,因此我不像喜欢老旧的TIniFile那样喜欢TMemIniFile


如果你不喜欢TMemIniFile,你可以实现自己的InMemory CustomIniFile。通过使用SubSections,它更接近于XML和JSON。 - Sir Rufo
... :-) 少用标点符号。 - Warren P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接