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

How to calculate delta on file i.e. changed file portion

本文关键字:文件部 计算 文件 何计算      更新时间:2023-10-16

我想在文件上计算一个delta,也就是说,我想像DropBox或Google Drive这样的应用程序那样只获取文件的更改部分。

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

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

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

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

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