我知道我可以MD5一个完整的文件,这是而不是我想要做的。如何比较不包括文件头的文件?
我想获取标题和实际的文件内容。
我知道每个文件都有一个头,然后有内容。我想比较两个文件的实际内容,以确定内容是否相同,然后我将在内容上使用简单的md5。
我的问题是如何从内容中分离标题,以便我可以进行计算? - 为了使这个更清楚,补偿是我需要知道的;他们将是相同的所有文件或不同,如果不同,我怎么能找到细节,所以我可以做到这一点。 (我知道漱口但找不到它)。
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(filename))
{
return md5.ComputeHash(SplitContentFromHeader(stream));
}
}
SplitContentFromHeader(stream)
{
.. do the thing and return the shortened stream
}
许多类型的文件没有一个头的。对于那些做的,没有办法区分标题和内容而不知道它是什么类型的文件。而且在大多数情况下,标题很重要,无论如何都应该包含在比较中。 –
@哈里约翰斯顿,对于任何给定的文件,有一个标题为什么你会说它应该包括在内,我的意思是例如一个图像文件 - 图像本身是什么使它一样的是不正确的?我没有正确地想到,标题定义了某些元数据,但实际内容(例如文档的文本)如果文本相同,文件内容是否真的相同? – Ken
这取决于格式。例如,考虑一个可执行文件。标题包含起始地址(和其他关键信息),因此与标题相同的两个可执行文件可能表现完全不同。旧的Microsoft Office格式也是如此;您可以将两个不相关的文档放入一个文件中,并且标题将决定您读取哪一个。我想你可以通过更改标题中的版本号来打破GIF文件;您可以通过更改标题信息来打破ZIP文件(包括现代Microsoft Office文件)。 –