我自己的存储和检索使用 Delphi 文本 DFM 格式的寿命很长

2023-11-21

随着时间的推移,我已经推出了自己的格式来保存和加载对象属性,但在必须重新访问时,我想知道是否使用 Delphi 自己的文本 DFM 格式。我知道这确实是一种“内部”格式,但它的读者现在似乎定义得很好,并且它可以处理所有类型的属性。有人对可能的陷阱有任何评论吗?


我并不是真的说 DFM 是一种“内部格式”。当然,Delphi 在内部将其用于表单和数据模块,但执行流处理的 TReader 和 TWriter 类是可公开访问的,甚至可以记录在案。因此,它们显然也是面向最终用户的。

现在,可能的问题是,当您保存流时,流中的类之一发生更改,导致流不再兼容。如果您尝试在 D7 中打开保存在 D2007+ 中的表单(缺少属性),您可能已经在 Delphi 中看到了这一点。但即使发生了,解决起来也不难。您将收到一个异常,该异常将报告导致问题的确切属性。您还必须注册您想要直播的所有课程RegisterClass.

DFM 可以以二进制或文本格式存储。即使您将其存储为二进制,您也可以将其转换为文本(使用ObjectBinaryToText),一旦采用文本格式,就很容易修复。

因此,您可能会因结构中的不兼容更改而发生问题,但这些问题与 DFM 机制本身无关,并且使用任何其他流机制也会发生。

至于寿命,您仍然可以在最新的 Delphi 中打开用 D1 保存的 DFM。因此,只要您牢记向后兼容性,就没有什么可担心的。

总之,选择任何特定格式(DFM、XML、JSON、您自己的......)并不会真正影响寿命。它们都需要相同级别的兼容性。

选择格式的原因更多地与以下方面的决策有关:

  • 与其他应用程序/服务的互操作性
  • 大小/速度/人类可读性

但你在问题中没有提到任何一个。

因此,我建议使用 DFM 来替代您自己的 DFM,因为这意味着需要维护的代码更少。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我自己的存储和检索使用 Delphi 文本 DFM 格式的寿命很长 的相关文章

  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • Delphi 7 - 处理表单中嵌入框架的 MouseWheel 事件?

    你好 我有一个表格 里面有几个框架 对于某些框架 我希望滚动内容 或至少处理鼠标滚轮事件 我已经尝试过以下方法 只需为每个帧分配一个 OnMouseWheel 事件处理程序 重写父窗体的 MouseWheel 事件 procedure TF
  • MainFormOnTaskbar + 工具提示导致焦点窃取

    我使用 Delphi XE2 构建了下面的代码 它创建 Form1 Form1 立即创建 Form2 的实例 当我按下 Form2 上的按钮时 会创建第二个 Form2 现在 如果我将鼠标悬停在第二个 最上面的 Form2 上的按钮上 并等
  • FireDac 添加下划线 1 以区分具有相同名称的 2 个列名

    我有一个连接 2 个表的选择 因此这些表中存在具有相似名称的列 因此现在在检索结果时 FireDac 将下划线 1 添加到第二个列名称以区分这两个表 Select from Table1 inner join Table2 on Table
  • 有用的 Delphi 代码模板

    我用 Delphi 编程已经两年多了 我大概只有 5 个自定义模板 我觉得我应该有更多 如果有人有任何特别有用的东西 那么在 stackoverflow 上有一个很好的存储库就太好了 我不在乎您使用的是 Delphi 2009 语法还是 D
  • jqGrid - 如何将网格设置为最初不加载任何数据?

    如何创建网格但不加载任何数据 如果我省略url选项然后loadError回调被触发 目前我们设置url NoData json其中 NoData json 是一个静态文件 其中没有行 问题出在我们的loadComplete如果网格不包含数据
  • 使用 TArray 而不是 Array of T 的原因是什么?

    我正在将遗留的 Delphi 应用程序迁移到 Delphi XE2 我想知道是否有充分的理由替换定义为的数组Array of MyType to TArray
  • Spring boot:从 bean 访问命令行参数

    我使用单个参数 文件名运行 spring boot 应用程序 该文件包含我在运行时需要的一些属性 当应用程序启动时 它会检查是否args length 1 但我需要这个文件 属性 在一个点 Component带注释的 bean 这是一种从中
  • Delphi 2005 Web 服务问题

    我在尝试通过 Delphi 访问 Web 服务时遇到问题 我使用了 2007 版 WSDLimp 工具的 java WSDL 看起来它已正确创建了所有对象 然而 当我制作一个调用该服务的测试程序时 每个对象都是空的 如果我在 HTTPRIO
  • Objective-C 中的属性和实例变量

    我对 Objective C 中的属性和实例变量感到相当困惑 我正在阅读 Aaron Hillegass 的 Mac OS X 的 Cocoa 编程 一切都很合乎逻辑 你可以像这样声明一个类 class Something interfac
  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • 如何将图片保存到文件中?

    我正在尝试使用标准意图来拍照 然后允许批准或重新拍摄 然后我想将图片保存到文件中 这是我正在使用的意图 Intent intent new Intent android provider MediaStore ACTION IMAGE CA
  • Windows 更新后 Active 设置为 False 时 TIdHttpServer 冻结

    我们有一个 Indy 版本 10 6 1 5235 TIdHttpServer 服务 多年来一直与 Delphi 2007 配合良好 在最新的 Windows 更新 KB4338815 和 KB4338830 之后 我们注意到当 TIdHt
  • jquery .load() 不起作用

    我似乎无法让 jquery 的 load 函数工作 一定是我缺少的一些简单的东西 基本上只是试图将 more html 的片段加载到 index html 中 索引 html
  • Objective-C 中可以创建私有财产吗?

    Objective C 中可以创建私有财产吗 我确实知道一种私有财产功能可以通过另一种方式实现 但我对特定问题感兴趣 谢谢 是的 可以 但是代码看起来有点奇怪 如果你打电话它只会给你一些警告 你必须自己检查警告 在您的实现文件 m 中 in
  • 从 Delphi 访问 TRAKT API - 承载身份验证问题

    使用 TOauth2Authenticator TRESTClient TRESTRequest TRESTResponseDataSet TRESTResponse TFDmemtable 和 TDataSource 我成功连接到 Tra
  • Firebird 或 NexusDB

    我知道有很多与 Delphi 数据库相关的问题 但我只考虑这两个数据库 我需要查询大约 100 000 条记录 根据您的经验 哪个更快 作为嵌入式 as C S Thanks 我还没用过 Nexus tbh 但我经常使用 Firebird
  • jQuery .load() html 内容并执行脚本

    我的文档中有以下功能 jQuery document ready function jQuery body on click a menu function var target jQuery this attr href jQuery c
  • 在该对象调用的事件期间销毁该对象

    我有一个按钮 它的 OnClick 事件调用一个销毁按钮的过程 但随后 线程 想要返回到 OnClick 事件 并且我遇到了访问冲突 我完全被难住了 您需要在按钮的所有代码执行完毕后销毁该按钮 执行此操作的标准方法是将用户定义的消息发布到表
  • 如何处理包内部的 R 数据?

    我正在开发的 R 包需要多个 R 数据对象 例如预先计算的模型和参数 目前 我将包的 数据 目录中的每个对象放在单独的 RData 文件中 使用该包时 用户可以使用 数据 功能将这些对象附加到他们的环境中 我想要的行为是 在加载包时 数据对

随机推荐