2010-08-04 6 views
10

Как я могу вычислить хэш MD5 для файла, который открыт или используется процессом?C# вычислить MD5 для открытого файла?

файлы могут быть TXT или и ехе

мой текущий код ошибки для возврата ехе, потому что он работает

вот мой текущий код

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

Спасибо, все работает отлично :-) –

6

Если вы обновите свой вызов конструктора FileStream;

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

Это должно позволить вам открыть файл, который используется другим процессом.

Смежные вопросы