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 - 为啥 ExplicitWidth 和 ExplicitHeight 不断出现在 .DFM 文件中,它是啥?
Delphi - 为啥 ExplicitWidth 和 ExplicitHeight 不断出现在 .DFM 文件中,它是啥?