【发布时间】:2011-05-09 11:46:38
【问题描述】:
随着时间的推移,我推出了自己的格式来保存和加载对象属性,但在不得不重新审视这一点时,我想知道使用 Delphi 自己的文本 DFM 格式。我知道这确实是一种“内部”格式,但它的读者现在似乎定义得很好,它可以处理所有类型的属性。有没有人知道可能的陷阱?
【问题讨论】:
标签: delphi load properties save dfm
随着时间的推移,我推出了自己的格式来保存和加载对象属性,但在不得不重新审视这一点时,我想知道使用 Delphi 自己的文本 DFM 格式。我知道这确实是一种“内部”格式,但它的读者现在似乎定义得很好,它可以处理所有类型的属性。有没有人知道可能的陷阱?
【问题讨论】:
标签: delphi load properties save dfm
我不会真的说 DFM 是一种“内部格式”。当然 Delphi 在内部将它用于表单和数据模块,但是执行流式传输的 TReader 和 TWriter 类是公开可访问的,甚至是文档化的。因此,它们显然也适用于最终用户。
现在,可能的问题是当您保存流时,稍后流中的某个类发生更改,从而导致流不再兼容。如果您尝试在 D7 中打开保存在 D2007+ 中的表单(缺少属性),您可能已经在 Delphi 中看到了这一点。但即使发生了,也不是太难解决。您将得到一个异常,该异常将报告导致问题的确切属性。您还必须使用RegisterClass 注册所有要流式传输的课程。
DFM 可以二进制或文本格式存储。即使您将其存储为二进制,您也可以将其转换为文本(使用ObjectBinaryToText),一旦为文本格式,就很容易修复。
因此,由于结构的不兼容更改可能会出现问题,但这些问题与 DFM 机制本身无关,使用任何其他流式机制也会发生。
至于长寿,你仍然可以在最新的Delphi中打开用D1保存的DFM。因此,只要您牢记向后兼容性,就没有什么好担心的。
总之,任何特定格式的选择,DFM、XML、JSON、您自己的……都不会真正影响寿命。它们都需要相同级别的兼容性。
选择格式的原因更多地与以下方面的决定有关:
但你没有在问题中提到任何这些。
所以我建议使用 DFM 来代替你自己的,因为这意味着需要维护的代码更少。
【讨论】: