[英]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
被垃圾收集或顯式調用其Close
或Dispose
方法。 在完成打開的文件后立即插入這樣的顯式調用,或者在using
語句中包含FileStream
的using
,這意味着調用Dispose
,就像其他答案所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.