【发布时间】:2015-12-08 13:48:40
【问题描述】:
我需要比较 .tar.gz 文件中的文件以确保 gzip 中的所有文件都不重复。我目前正在使用 ICSharpCode.SharpZipLib,由于 ZipEntry 具有“CRC”属性,因此可以轻松检查 Zip 文件中的重复项。这非常简单,因为我可以获得 crc 和文件大小,并使用 LINQ 查找哈希和大小匹配的任何文件,然后抛出错误或执行任何必要的操作。
但是,TarEntry 没有这样的属性或方法,除了标准的 GetHashCode 方法,据我了解,它还从文件元数据计算散列,因此同一文件的副本没有相同的散列。有没有一种方法可以(快速)计算 gzip 文件内容的哈希值?还是有其他方法可以比较内容?
【问题讨论】:
-
如果您只想检查
.tar.gz文件本身是否与其他.tag.gz文件重复,那么文件的sha1或sha256哈希就足够了。如果您打算打开存档并单独检查每个文件,不确定在那里建议什么,但加密哈希仍然是您确定内容相等性的最佳选择。 -
是的,我希望比较 .tar.gz 中的每个文件,以确保文件中没有重复项。 (还是)感谢你的建议。我稍后可能会实现它来检查 .tar.gz 文件本身。
-
不幸的是,如果不先提取所有内容,我看不出你会如何做你想做的事。看来您需要解压缩 + 提取存档,然后使用加密哈希处理每个单独的文件,但您必须将所有内容与其他所有内容进行比较——
O(n^2)操作。我认为你试图做的是一个坏主意。考虑直接检查档案。如果您担心重复,请尝试在它们被创建之前处理它。
标签: c# hash gzip checksum sharpziplib