Delphi 有时会将文本格式文件 (DFM) 恢复为二进制格式吗?

Posted

技术标签:

【中文标题】Delphi 有时会将文本格式文件 (DFM) 恢复为二进制格式吗?【英文标题】:Does Delphi sometimes revert text form files (DFM) to binary format? 【发布时间】:2009-05-09 07:41:18 【问题描述】:

我们的 Delphi 7 开发团队以文本模式存储表单文件 (dfm),并使用源代码控制系统 (Subversion) 来跟踪更改。

有时,我们注意到表单文件在修订之间返回二进制格式,导致 TortoiseMerge 等差异工具抱怨。

使用 Subversion 更改日志,我可以看到 DFM 文件之前以文本形式存储。软件开发人员从不手动将存储文件格式改回二进制。

你也遇到过吗?这是一个已知问题吗?

【问题讨论】:

这是一个老问题,这并不能回答这个问题。然而,谷歌向我展示了这里,所以如果这发生在其他人身上,我想把它留在这里。 Delphi 有一个转换工具,您可以像这样运行它来将所有 dfm 文件从二进制转换为文本:<path to delphi>\bin\convert.exe -i -s -t *.dfm。那些已经是文本的内容保持不变。 【参考方案1】:

这在 Delphi 7 中确实发生过,但在以后的版本中已修复。通常,您通过打开 .pas 文件然后切换到表单视图来访问 IDE 中的表单。右键单击您的表单,如果您之前这样做过,它将显示它是“Text DFM”。

当您在 Delphi 7 IDE 中直接打开 .dfm 文件时,您将遇到您所描述的文本 DFM 切换到二进制 DFM 的问题。例如。 File->Open->Somefile.dfm .. 右键单击​​ dfm 并选择“View as Form”。现在右击表单,你会看到“Text DFM”被取消了。

当我们打开一个 grep 搜索结果的 DFM 时,我们遇到了问题。它也让我们感到困惑,并且会导致 cvs 中的 dfm 在作为文本签入时损坏。

【讨论】:

【参考方案2】:

我在 Delphi 7 中看到过这种情况,当一个从不同项目的另一个表单继承的表单在 Delphi 中自行打开时,它所属的项目没有打开。

【讨论】:

【参考方案3】:

当 IDE 出现混乱时,有时会发生这种情况。

它通常在您在 Delphi 7 IDE 中出现访问冲突后开始。

有时,IDE 中的一个或多个 Delphi 编辑器缓冲区也会变为只读(而磁盘上的文件仍处于读/写状态)。

这种行为在 Delphi 5 或 6 中发生的次数要少得多,但有时在 Delphi 7 中确实会发生。

您可以做的最好的事情是在遇到访问冲突时立即重新启动 Delphi 7 IDE。

【讨论】:

【参考方案4】:

如果有人用不同版本的Delphi打开项目(或更改了默认设置),他可能会以不同的格式保存表单。

【讨论】:

好提示,我会检查一下。我们还安装了 Delphi 2007 和 2009。默认设置仅适用于新表单,因此我不确定它们如何影响现有表单。【参考方案5】:

您可能有兴趣研究 Beyond Compare 的使用,而不是 TortoiseSVN 的内置合并工具。 Beyond Compare 是用 Delphi 编写的,并且本机知道如何读取二进制 DFM。这意味着无论您的 DFM 是以二进制还是文本形式存储在 Subversion 中,这都不再是一个问题(甚至没有问题)。 Beyond Compare V3 还进行 3 路合并,这使得合并多个提交等变得非常容易。即使忽略区分二进制 DFM 的能力,它仍然是比 TortoiseSVN 的内置工具更好的差异查看器。我强烈推荐它,而且它非常便宜(我与 Scooter Software 没有任何联系,除了是一个非常满意的客户)。

Scooter Software

【讨论】:

【参考方案6】:

我们肯定遇到过这种情况。我们只使用 D7。

从来没有深入了解它,因为它每年只发生六次左右,虽然它很麻烦,但很容易补救。

我很想看看 Lars 的回答,并且一定会在下次发生这种情况时看看这是否是可能的原因。

【讨论】:

【参考方案7】:

我们也时不时遇到这个问题,这似乎与查看 DFM 的源代码 (Alt-F12) 然后进行 Visual Source Safe 操作(例如签入)有关。

【讨论】:

以上是关于Delphi 有时会将文本格式文件 (DFM) 恢复为二进制格式吗?的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 常见文件类型

文本 DFM 上下文菜单选项是啥意思?

Delphi实现类的持久化保存(DFM格式)

Delphi - 为啥 ExplicitWidth 和 ExplicitHeight 不断出现在 .DFM 文件中,它是啥?

Delphi - 为啥 ExplicitWidth 和 ExplicitHeight 不断出现在 .DFM 文件中,它是啥?

delphi中的.dpr.pas和.dfm文件都怎么解释?