我的C#app正在锁定一个文件,我怎么能找到它的位置呢?

时间:2010-09-14 12:03:13

标签: c# file file-io locking

我正在编写检查文件路径计算哈希值(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中找到锁定文件的位置?

4 个答案:

答案 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被垃圾回收或您明确调用其FileStreamClose方法之前,Dispose不会关闭已打开的文件。在您完成打开的文件后立即插入此类显式调用,或者在FileStream语句中包含using的使用,这意味着调用Dispose,如其他答案表明。