2016-07-27 52 views
0

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

+0

这可能是你感兴趣的:http://www.daemonology.net/bsdiff/ –

+1

大多数文件(办公文档,图像,视频等)不会在原地进行修改,但保存后会创建一个新的临时文件,写入,然后删除旧文件并重命名新文件。只有基于记录的应用程序才能覆盖文件。 –

+1

这可能是不值得的努力。设想一下每周(甚至每月)完整备份,每天一次或两次增量备份。对于任何增量备份已更改的每个文件,都必须返回上一次完整备份,将旧版本的文件从该备份复制到某个工作空间,然后将更改应用于每个备份中的副本在完整备份后进行的每次增量备份 - 然后将重新创建的文件内容与您要备份的内容进行比较,以便找出新的差异。那至少会有* triple *备份IO需求。 –

回答

0

您需要跟踪所有写入操作(IRP进入文件系统),然后才能发生,并且在执行成功后立即执行。这是在文件系统过滤器驱动程序的帮助下完成的。您可以使用C语言自己创建一个,也可以使用我们的CallbackFilter产品,该产品包含用于.NET,C++和Delphi的驱动程序和用户模式API。