【问题标题】:How to find block level or disk level changes between two versions of the same file?如何查找同一文件的两个版本之间的块级或磁盘级更改?
【发布时间】:2016-07-27 05:48:48
【问题描述】:

我正在为 Windows 操作系统开发备份应用程序。首先,我进行完整备份并将整个文件复制到备份媒体。接下来,在进行增量备份时,我只需要查找在进行上一次完整备份之后对文件所做的更改。为此,我需要确定同一文件的两个版本之间的块级或磁盘级更改。我检查了 FileSystemWatcher https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx 类,但它只在更改完成时通知我。它没有为我提供文件的块级更改。有没有其他方法可以做到这一点?

【问题讨论】:

  • 您可能对此感兴趣:daemonology.net/bsdiff
  • 大多数文件(办公文档、图像、视频等)不会就地修改,而是在保存时创建、写入新的临时文件,然后删除旧文件并重命名新文件。只有基于记录的应用程序(如数据库)会覆盖原地文件。
  • 这可能不值得。想象一下每周(甚至每月)一次或两次增量备份的完整备份。对于任何增量备份已更改的每个文件,您都必须返回上一个完整备份,将该文件的旧版本从该备份复制到某个工作空间,然后将更改应用到每个和在完整备份之后进行的每个增量备份 - 然后将重新创建的文件的内容与您尝试备份的内容进行比较,以找到新的差异。这将至少 三倍 备份 IO 需求。

标签: c# c++ windows file filesystems


【解决方案1】:

您需要在所有写入操作(IRP 进入文件系统)发生之前和成功执行之后跟踪它们。这是在文件系统过滤器驱动程序的帮助下完成的。您可以使用 C 自己创建一个,也可以使用我们的 CallbackFilter 产品,其中包括用于 .NET、C++ 和 Delphi 的驱动程序和用户模式 ​​API。

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 2023-02-07
    • 2023-01-15
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多