如何计算文件上的增量,即更改的文件部分

时间:2013-08-02 06:53:06

标签: c# c++ c windows

我想计算文件中的增量,即我希望像DropBox或Google Drive这样的应用程序只获取文件的更改位。

一旦监视文件夹中的文件发生变化,我想知道受影响字节的偏移量以及要发送到文件服务器的更改字节。

我想在Windows平台上实现这个解决方案,所以我可以使用C,C ++或C#.Net解决方案。

更新 示例:假设我的本地监视文件夹中有一个大小为10 MB(二进制或文本)的文件X.我们假设我修改了1 MB。现在我想只获取修改后的字节(1 MB)和一个可以在文件服务器上应用1 MB的范围。这也称为Delta Sync功能。

2 个答案:

答案 0 :(得分:4)

在Linux / Unix中有一个名为rsync的命令基本上可以满足您的需要,而这个程序的想法是,它会获取更改的第一个块(大小,比方说,512字节)使用弱校验和算法计算并计算此块的校验和,并将其与原始文件的校验和进行比较。如果校验和不同,那么我们会发现一个已更改的块。如果弱校验和是相同的,则它使用强校验和算法计算该块的另一个校验和,然后再次将其与原始文件的校验和进行比较。如果校验和是相同的,我们可以放心,这个块没有改变。然后程序向前移动一个字节(不是块,BYTE)并拾取另一个块并重复此过程。关于这个算法最重要的一点在于弱校验和算法,它被称为rolling checksum。此校验和算法允许您在O(1)时间内计算(k + 1,k + 513)与(k,k + 512)的校验和。您可以查看this以了解此算法的详细信息。

答案 1 :(得分:0)

这不是Drive或Dropbox的功能,当他们将文件标记为已更改时,会重新加载整个文档。事实是,当你保存一些可以说重要信息分散在作为文档的二进制文件中的不同位置时。