C# 计算MD5和SHA1校验和时发生IOException

C# 计算MD5和SHA1校验和时发生IOException,c#,.net,md5,sha1,C#,.net,Md5,Sha1,我在执行为给定文件计算MD5和SHA1校验和的方法时遇到问题。我的方法如下所示: SHA1: 但在遇到上述问题和一些调查后,我将其改为: byte[] hashBytes = SHA1ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read)); 这也无济于事。您打开文件时没有关闭它。只需单独打开流,就可以使用语句在中关闭它: MD5 md5 = MD5.Create(); using (var stream = F

我在执行为给定文件计算MD5和SHA1校验和的方法时遇到问题。我的方法如下所示:
SHA1:

但在遇到上述问题和一些调查后,我将其改为:

byte[] hashBytes = SHA1ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read));

这也无济于事。

您打开文件时没有关闭它。只需单独打开流,就可以使用语句在
中关闭它:

MD5 md5 = MD5.Create();
using (var stream = File.Open(...))
{
    var hash = md5.ComputeHash(stream);
    // ...
}
(我还建议将“convert to hex”代码分开以避免重复。您甚至可以使用一个文件名和一个
HashAlgorithm
的方法来避免进一步的重复…)


这将避免您的代码持有打开的文件流,这将阻止代码打开另一个文件流(包括相同的进程)。。。但这对目前在其他地方开放的任何电影都没有帮助。如果您无法打开文件读取它,您将无法计算哈希。

您打开文件时没有关闭它。只需单独打开流,就可以使用
语句在
中关闭它:

MD5 md5 = MD5.Create();
using (var stream = File.Open(...))
{
    var hash = md5.ComputeHash(stream);
    // ...
}
(我还建议将“convert to hex”代码分开以避免重复。您甚至可以使用一个文件名和一个
HashAlgorithm
的方法来避免进一步的重复…)


这将避免您的代码持有打开的文件流,这将阻止代码打开另一个文件流(包括相同的进程)。。。但这对目前在其他地方开放的任何电影都没有帮助。如果无法打开文件来读取它,则无法计算散列。

file.open()
返回应处理的内容。需要对file.open
file.open()使用using语句
返回应该处理的内容。您需要对文件使用using语句。open
using
语句实际上有帮助,但并不完全有效。我仍然被一些文件卡住了。@Piottruszkowski:也许这些文件在其他应用程序中打开了?如果你只是无法打开文件,那么你可以做的就不多了…谢谢你提供的信息。我只是将文件标记为已锁定,应该这样做…
使用
语句实际上有帮助,但并不完全有效。我仍然被一些文件卡住了。@Piottruszkowski:也许这些文件在其他应用程序中打开了?如果你只是无法打开文件,那么你可以做的就不多了…谢谢你提供的信息。我会将文件标记为已锁定,应该这样做。。。
byte[] hashBytes = SHA1ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read));
MD5 md5 = MD5.Create();
using (var stream = File.Open(...))
{
    var hash = md5.ComputeHash(stream);
    // ...
}