С# вычислить MD5 для открытого файла?

как я могу вычислить хэш 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();
}

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

Ответ 1

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

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

или:

FileStream file = File.OpenRead(fileName);

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

Ответ 2

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

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

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