2010-02-08 33 views
5

我需要刪除一個文件。偶爾,該文件可能被鎖定,在這種情況下,我想解鎖並刪除它。如何在c#中強制解鎖文件?

到目前爲止,我在研究中遇到了兩種可能性。

System.IO.FileStream.Unlock

//unlock file 
[DllImport("kernel32.dll", SetLastError = true)] 
internal static extern bool UnlockFile(IntPtr handle, int offsetLow, int offsetHi);` 

請問這兩種方法的工作?如果是這樣,請你提供一個樣品,因爲我還沒有得到這些工作。或者,還有更好的方法嗎?

回答

0

使用PSTools實用程序結束,似乎工作正常。

2

您應該使用延遲文件操作,請參閱How To Move Files That Are Currently in Use('Move'包含在此上下文中刪除)。

UnlockFile和朋友用於文件區域鎖定操作,不用於文件句柄鎖定,請參閱Locking and Unlocking Byte Ranges in Files。 Hopefuly沒有API解鎖鎖定的文件句柄,這將使鎖定非常useles ...

+2

Windows文件鎖定是無用的 - 它是如此錯誤的過時的鎖始終留在原地。 – earcam 2012-03-15 11:27:22

0

,你可以嘗試做一個P/Invoke調用到MoveFileExMOVEFILE_DELAY_UNTIL_REBOOT

系統在操作系統重新啓動之前不會移動文件。 AUTOCHK執行後,系統立即移動文件,但在創建任何分頁文件之前。因此,該參數使該功能可以從以前的啓動中刪除分頁文件。

1

我在RedGates的Reflector中查找了對System.IO.FileStream.Unlock()的調用,它似乎只是調用了外部調用UnlockFile()。這些方法是相同的。

我們目前的策略是在我們有合理的期望文件即將被解鎖時進行延遲,否則我們會錯誤的。

+0

我不明白你的意思... – 2010-02-08 23:50:18