2010-08-04 27 views
10

如何計算進程打開或使用的文件的MD5哈希值?C#計算打開的文件的MD5?

的文件可以TXT或和exe

這裏的EXE我當前的代碼返回錯誤,因爲它正在運行

是我當前的代碼

public static string GetMd5HashFromFile(string fileName) 
{ 
    FileStream file = new FileStream(fileName, FileMode.Open); 
    MD5 md5 = new MD5CryptoServiceProvider(); 
    byte[] retVal = md5.ComputeHash(file); 
    file.Close(); 

    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < retVal.Length; i++) 
    { 
     sb.Append(retVal[i].ToString("x2")); 
    } 
    return sb.ToString(); 
} 

乾杯。

回答

10

嘗試打開文件爲只讀:

FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read); 

或:

FileStream file = File.OpenRead(fileName); 

這將取決於其他文件句柄的共享模式。如果因爲它是一個正在運行的EXE文件才被鎖定,我認爲這足夠了。

+0

感謝分配,完美工作:-) – 2010-08-04 13:19:39

6

如果你更新你的FileStream構造函數調用到這個;

FileStream file = File.Open(fileName, 
          FileMode.Open, 
          FileAccess.Read, 
          FileShare.ReadWrite); 

這應該允許您打開另一個進程正在使用的文件。