2008-10-23 79 views
2

我需要恢復形式的文件進入鎖定狀態的錯誤情況。我如何在C#中告訴這個文件重置它的鎖?我需要添加到此文件是由第三方DLL打開,我實際上沒有訪問文件句柄。刪除文件鎖

回答

1

也許你可以這樣開始網或psfile中一個命令行程序沿着線的東西:

System.Diagnostics.Process.Start("psfile c:\myfile.txt -c");

你可以得到psfile中here

你也可以使用

net file ID /close

但這需要你知道文件ID,這將需要更多的工作。

未經測試,但這應該給你一個出發點。

0

您必須使用.Close()關閉文件。您需要確保您仍然有訪問文件對象的方式。

通常可以通過在執行文件I/O的代碼之後編寫try {} ... finally {}構造來避免此錯誤。在finally {}塊中,您可以調用文件對象的Close方法,以防止出現這種情況。您也可以在創建文件時使用使用{}塊,這也會解決這個問題。

+0

這將工作,如果我不是在第三方DLL中打開該文件。 – Erin 2008-10-23 02:21:03

5

鎖定文件是操作系統的責任(代表打開它的程序)。如果一個文件處於鎖定狀態,那麼它真正取決於要解鎖的操作系統。這通常會在打開文件的進程退出時自動發生。

然而,有一個非常酷的實用程序,我遇到,這將有所幫助。它被稱爲Unlocker

1

我真的會考慮找到另一個第三方DLL。任何處理Streams的系統都應該正確地響應錯誤情況,並且不要留下文件鎖定之類的東西。

有沒有可能庫提供了錯誤條件清理,你剛看過嗎?試着像下面這樣,

try { 
    thirdPartyObj = new ThirdPartObj(); 
    // Some possible error causing object actions 
catch(Exception ex) { 
    thirdPartyObj = null; // The object should close its resources 
} 
+0

該進程掛起並吃掉了cpu的50%。在其他情況下,它將返回一個錯誤代碼。這是一個C++ dll中的靜態函數。 – Erin 2008-10-23 13:27:12