C # рассчитать MD5 для открытого файла? - PullRequest
10 голосов
/ 04 августа 2010

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

файлы могут быть в формате txt или 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();
}

Приветствие.

Ответы [ 2 ]

10 голосов
/ 04 августа 2010

Попробуйте открыть файл только для чтения:

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

или:

FileStream file = File.OpenRead(fileName);

Это будет работать в зависимости от режима совместного использования других файловых дескрипторов.Если файл заблокирован только потому, что это исполняемый EXE, думаю, этого будет достаточно.

6 голосов
/ 04 августа 2010

Если вы обновите свой вызов конструктора FileStream следующим образом:

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

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

...