在c#中计算哈希或比较gzip文件的内容

时间:2015-12-08 13:48:41

标签: c# hash gzip checksum sharpziplib

我遇到需要比较.tar.gz文件中的文件的问题,以确保gzip中的所有文件都不重复。我目前正在使用ICSharpCode.SharpZipLib,这样可以很容易地检查Zip文件中的重复项,因为ZipEntry有一个" CRC"属性。这非常简单,因为我可以获取crc和filesize,并使用LINQ查找匹配哈希和大小的任何文件,然后抛出错误或做任何必要的事情。

但是,除了标准的GetHashCode方法之外,TarEntry没有这样的属性或方法,据我所知,该方法还会根据文件元数据计算哈希值,因此同一文件的副本不具有相同的哈希值。有没有办法(快速)计算gzip文件内容的哈希值?或者还有另一种比较内容的方法吗?

1 个答案:

答案 0 :(得分:0)

首先,如果两个文件的长度不同,那么你就知道它们不能相等。因此,使用zip或tar作为第一个过滤器。

其次,哈希会告诉你两个文件是否不同,但它不能告诉你它们是相同的。如果平等很少,那么散列是排除大多数竞争者平等的好方法。假设已经计算了哈希值。但是,如果两个哈希值相等,则需要直接比较文件以查看它们是否相等。

如果尚未计算哈希值,那么跳过计算哈希值并简单地比较长度相等的文件通常会更快。唯一不会更快的方法是,如果您经常使用具有相同长度和公共前缀的文件集,那么它们只会在文件中有一些重要的长度。