我正在编写检查文件路径计算哈希值(SHA1)并复制它们的代码。 我确保我不会像使用
那样锁定它们public static string SHA1(string filePath)
{
var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var formatted = string.Empty;
using (var sha1 = new SHA1Managed())
{
byte[] hash = sha1.ComputeHash(fs);
foreach (byte b in hash)
{
formatted += b.ToString("X2");
}
}
return formatted;
}
那么我怎样才能在Visual Studio中找到锁定文件的位置?
答案 0 :(得分:15)
您可以保留上述语法并尝试一下吗?
using(var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
//Your code goes here.
}
答案 1 :(得分:4)
有一个小软windows:进程资源管理器,你可以在其中找到哪个进程有文件句柄:
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
答案 2 :(得分:3)
每当您在文件上创建文件流而不稍后关闭该流时,通常会发生锁定。除非您在代码中调用fs.Close();
,否则您的应用程序将保持文件处于打开状态(从而锁定)。
您可以将其包装在try-finally
块中,或尝试使用Siva Gopal发布的代码。
答案 3 :(得分:1)
您假设仅使用FileAccess.Read
打开文件流不会锁定文件有问题;该文件在为文件操作打开并且尚未关闭时被锁定。
在FileStream
被垃圾回收或您明确调用其FileStream
或Close
方法之前,Dispose
不会关闭已打开的文件。在您完成打开的文件后立即插入此类显式调用,或者在FileStream
语句中包含using
的使用,这意味着调用Dispose
,如其他答案表明。