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

C# 如何计算文件的增量,即更改的文件部分,c#,c++,c,windows,C#,C++,C,Windows,我想计算文件的增量,也就是说,我只想像DropBox或GoogleDrive这样的应用程序那样,得到文件的更改位 一旦监视文件夹中的文件发生更改,我想知道受影响字节的偏移量以及要发送到文件服务器的更改字节的偏移量 我想在Windows平台上实现这个解决方案,所以我对C、C++或C·.net解决方案很好。 更新: 示例:假设我的本地监视文件夹中有一个大小为10MB(二进制或文本)的文件X。假设我修改了1MB。现在,我只想获取修改过的字节(1MB)和可以在文件服务器上应用1MB的范围。这也称为增量同

我想计算文件的增量,也就是说,我只想像DropBox或GoogleDrive这样的应用程序那样,得到文件的更改位

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

我想在Windows平台上实现这个解决方案,所以我对C、C++或C·.net解决方案很好。 更新:
示例:假设我的本地监视文件夹中有一个大小为10MB(二进制或文本)的文件X。假设我修改了1MB。现在,我只想获取修改过的字节(1MB)和可以在文件服务器上应用1MB的范围。这也称为增量同步功能。

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

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

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

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

您是否在谈论任何类型的文件(文本、图像、可执行文件等)?通常通过选择块大小(例如2K)并对每个块进行某种哈希来完成。如果一个块的散列不匹配,你将重新传输该块。扩展的方式-目前还不清楚你在代码中面临的问题(基本区别是找到两个文件不相同的第一个点有点容易…)。你可以考虑阅读和相关文章来感受方法和问题。AlexeiLevenkov谢谢你的回复。我的问题是,我有一个本地文件,我想在本地文件更改后立即在文件服务器(HTTP/FTP等)上同步。但我不想同步整个文件。相反,我希望计算增量并发送到文件服务器,该服务器将在文件上应用该增量。您是否在谈论任何类型的文件(文本、图像、可执行文件等)?通常通过选择块大小(例如2K)并对每个块进行某种类型的哈希来完成。如果一个块的散列不匹配,你将重新传输该块。扩展的方式-目前还不清楚你在代码中面临的问题(基本区别是找到两个文件不相同的第一个点有点容易…)。你可以考虑阅读和相关文章来感受方法和问题。AlexeiLevenkov谢谢你的回复。我的问题是,我有一个本地文件,我想在本地文件更改后立即在文件服务器(HTTP/FTP等)上同步。但我不想同步整个文件。相反,我想计算增量并发送到文件服务器,该服务器将在文件上应用该增量。Zsync 2。bsdiff 3。LibSyncy感谢滚动校验和,我得到了更多的提示:1。Zsync 2。bsdiff 3。Libsync