【问题标题】:Transactional File System for Delphi?Delphi的事务文件系统?
【发布时间】:2011-06-01 12:37:03
【问题描述】:

您知道 Delphi 是否有任何事务性文件系统实现?它至少应该可以在 Windows XP 和更高版本上运行(因此不能使用新的 TxF 功能)。它应该允许执行多个文件操作(删除、移动、复制、重命名)作为事务并提供恢复。

谢谢!

【问题讨论】:

  • 你在保护什么?另外,您是在谈论使用容器文件,还是只是在“普通”文件系统上执行事务操作?因为如果 FS 本身不支持事务,您不会真的 执行后者。您可以在很多情况下伪造它,但您可能必须自己编写所有支持框架。即使使用容器,您仍然需要处理底层 FS 的语义。
  • @afrazier:后一种:普通文件系统上的事务操作。例如:如果复制了100个文件,第87个失败,则应该删除前86个已经复制的文件。
  • 如何为 Delphi 实现事务文件系统?如果您必须在操作系统中使用它,则必须为操作系统实现它。如果您只想在应用程序中使用它,请使用数据库 - 它们提供事务支持。
  • @gabr:我想在我的应用程序中使用它,并且我知道数据库提供 ACID 事务,但在这种情况下,这既不是问题也不是可能的。我必须进行文件操作,我想尽可能接近 ACID。顺便说一句:有 .NET 和 Java 实现可以解决这个问题,例如:onjava.com/pub/a/onjava/2001/11/07/atomic.html 只是想问一下 Delphi 世界中是否有可用的东西。
  • @Smasher:那么你真的需要底层文件系统的支持。您可以通过更改原始副本和重命名交换来“伪造”它,但这需要您的应用程序设计为以这种方式运行。

标签: delphi transactions io


【解决方案1】:

恐怕您解决此问题的唯一方法是使用结构化存储。 实际上,您在这里有几个选择:免费路线或商业路线。 免费路线:使用GPStructuredStorage进行处理。当您对结果感到满意时,只需复制您的文件即可。

商业路线:有一些组件包(收费)也有本地 Windows 驱动程序。那里发生的情况是,用户以他们过去的方式“查看”他们硬盘上的文件,但您实际上是将它们存储在复合文件中。 我相信他们中的一些人甚至有某种“文件历史记录”,这样你就可以及时倒退——但我不确定这一点。

安德烈亚

【讨论】:

    【解决方案2】:

    也许你可以使用COM Structured Storage

    【讨论】:

    • 感谢您的回答,但不幸的是,在这种情况下,这不是一个选项。我必须使用的文件存在,我无法更改它们的存储方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多