1

我知道有几个程序可以通过网络同步文件。他们都没有做我一直在想的事情。让我解释一下我想要实现的目标......

在我的网络中,几台计算机共享相同的文件。例如,quickbooks 文件被多台计算机访问,它是一个大文件。也有来自outlook large 的pst 文件。每天晚上,我们都会通过网络创建已更改文件的备份。我认为如果有一些小的修改,复制整个 1 gb 文件是不明智的。所以我想提出一个算法来比较部分文件。

例如,假设 Outlook pst 文件由字节组成:

1, 2, 3, 4, 5, 6, 7, 8, 9    

如果我收到一封电子邮件,字节现在将是:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10    for example

现在而不是发送整个文件,只发送字节 10 会更容易

所以实际上该文件有数千个字节,所以我将对文件的每一兆字节进行校验和,所以现在我的表应该如下所示:

aaa1, aaa2, aaa3, abf8, etc...   

如果现在收到电子邮件时,pst 文件的表格如下:

aaa1, aaa2, aaa3,  7a8b, etc  ... then I know that the first 3 megabits are the same and I should send just one megabite instead of the entire file...

我认为如果在文件末尾添加内容,这个算法会很好用,但实际上文件开头可能会更改一个字节,而我的算法将无法正常工作。例如,如果在文件开头添加一个字节,所有十六进制代码都会改变......

我怎样才能使算法更有效?如果我可以发送部分文件而不是整个文件,那就太好了

4

2 回答 2

3

rsync 协议将有效地同步具有小差异的大文件。它比您设想的方案要聪明得多,因此您应该在着手自己的解决方案之前阅读 Tridgell 和 Mackerras 的文章,或者只使用rsync这里有一个免费的 Windows 包装器。

于 2011-12-05T21:35:39.653 回答
2

您可能需要研究滚动校验和以及rsync 使用的算法。

基本上,您在块上计算如上所述的哈希,但您还计算滚动校验和。滚动校验和具有允许您更有效地检查的属性,例如,一个字节被附加到文件的开头。

于 2011-12-05T21:42:21.903 回答