我知道我可以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文件)。 –