2009-08-28 99 views
1

早上好,MD5文件處理

我正在使用C#中的MD5文件完整性檢查工具。

需要多長時間才能爲文件提供MD5校驗和值? 例如,如果我嘗試獲取2gb .mpg文件,則每次需要大約5分鐘+。 這看起來太長了。

我只是不耐煩嗎?

下面是我跑

public string getHash(String @fileLocation) 
    { 
     FileStream fs = new FileStream(@fileLocation, FileMode.Open); 

     HashAlgorithm alg = new HMACMD5(); 
     byte[] hashValue = alg.ComputeHash(fs); 

     string md5Result = ""; 

     foreach (byte x in hashValue) 
     { 
      md5Result += x; 
     }   

     fs.Close();   

     return md5Result;   
    } 

代碼的任何建議,將不勝感激。

問候

+0

還有一次,使用StringBuilder,而不是正常的字符串連接。這是waaaay更快:) – f2lollpll 2012-03-20 19:12:29

回答

7

參見如何以最有效的方式計算文件的哈希值this。基本上,你必須包裝FileStreamBufferedStream比哺養到HMACMD5.ComputeHash(Stream)超載:

HashAlgorithm hmacMd5 = new HMACMD5(); 
byte[] hash; 

using(Stream fileStream = new FileStream(fileLocation, FileMode.Open)) 
    using(Stream bufferedStream = new BufferedStream(fileStream, 1200000)) 
     hash = hmacMd5.ComputeHash(bufferedStream); 
+0

嗨安東,這似乎很有前途,但我有幾個問題試圖實施您的解決方案。我是否正確地認爲BufferedStream包裝了FileStream,並且都使用了它們自己的語句? 此外,在你的解決方案,不是兩個類使用相同的變量'流'..仔細檢查,這是正確的?對此,VC#抱怨。 Regards – Ric 2009-08-28 10:39:38

+0

@Ric:編輯我的答案。看看是否有幫助。 – 2009-08-28 11:07:03

+0

@Anton - 非常棒,效果非常好。謝謝 – Ric 2009-08-28 13:12:26