簡體   English   中英

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

[英]My C# app is locking a file, how I can find where it does it?

我正在編寫檢查文件路徑計算哈希值(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中如何找到它鎖定文件的位置呢?

你能保持上面的語法並嘗試一下嗎?

using(var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
//Your code goes here.
} 

有一個小軟windows:進程資源管理器,你可以在其中找到哪個進程有文件句柄:

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

每當您在文件上創建文件流而不稍后關閉該流時,通常會發生鎖定。 除非你調用fs.Close(); 在您的代碼中,您的應用程序將保持文件打開(並因此鎖定)。

你可以將它包裝在try-finally塊中,或者嘗試Siva Gopal發布的代碼。

你假設只用FileAccess.Read打開文件流就不會鎖定文件有問題; 該文件在為文件操作打開並且尚未關閉時被鎖定。

一個FileStream直到不關閉已打開的文件FileStream被垃圾收集或顯式調用其CloseDispose方法。 在完成打開的文件后立即插入這樣的顯式調用,或者在using語句中包含FileStreamusing ,這意味着調用Dispose ,就像其他答案所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM