2012-06-28 49 views
0

我在複製文件時遇到問題,然後驗證文件的完整性。我已經嘗試了所有我能想到的文件複製方法(File.Copy,filestreams,嘗試執行二進制副本),但複製後文件哈希總是不同。我一直在四處搜尋,並且我注意到很多人說從網絡共享中複製文件可能會導致這種情況,但我從共享中獲得相同的結果,因爲我只是直接從我的硬盤驅動器獲得。文件副本不會更改文件散列

//File hashing method: 
private byte[] hashFile(string file) 
{ 
    try 
    { 
     byte[] sourceFile = ASCIIEncoding.ASCII.GetBytes(file); 
     byte[] hash = new MD5CryptoServiceProvider().ComputeHash(sourceFile); 
     return hash; 
... 

使用這種方法的原始文件和拷貝文件始終貫穿每次運行產生相同的哈希值(分別),但兩個散列是不一樣的。有誰知道在不更改文件哈希的情況下複製文件的方法嗎?

+1

你檢查什麼是對的ByteArray區別是什麼?小/大Endian問題? –

+5

看來你正在哈希文件名,而不是文件的內容。 – Sjoerd

+4

爲什麼該文件是一個字符串? – harold

回答

3

我認爲你是哈希文件名 ..而不是內容!

所以確定它不會計算爲相同!

檢查值以及文件和字節長度[]的資源文件

+0

好的呼叫......這當然解釋了這個問題! * facepalm * – DarkShadow

3

似乎要傳遞的文件名,而不是文件內容的哈希函數。

使用這樣的事情:

byte[] hash = md5.ComputeHash(File.ReadAllBytes(filename)); 

或者這樣:

using (var stream = File.Open(filename)) { 
    byte[] hash = md5.ComputeHash(stream); 
} 
+0

ty回答哪一個更好? – MonsterMMORPG