C#如何计算打开文件的MD5?

10

如何计算正在被进程打开或使用的文件的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();
}

干杯。

2个回答

10

尝试以只读模式打开文件:

FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
或者:
FileStream file = File.OpenRead(fileName);

根据其他文件句柄的共享模式,这将起作用。如果该文件只因为它是一个正在运行的EXE而被锁定,我认为这就足够了。


7
如果您将FileStream构造函数的调用更新为以下内容;
FileStream file = File.Open(fileName,
                            FileMode.Open,
                            FileAccess.Read,
                            FileShare.ReadWrite);

这将允许您打开正在被其他进程使用的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接