2010-08-13 67 views
1

我正在編寫一個Maven插件,它使用File.delete()File.renameTo(File) JDK方法刪除並重命名各種文件。無法重命名或刪除文件實例

大約每隔一段時間我運行插件,其中一個操作失敗,每次失敗時它是一個不能被刪除或重命名的不同文件。爲什麼文件不能被刪除的一個明顯的解釋是另一個進程正在使用它(我在Windows上運行),但我不知道哪個進程可能是負責任的。事實上這個問題不能一致地重現,這表明線程問題,但AFAIK,Maven插件運行在一個線程中。很難得到有關問題原因的任何信息,因爲上面提到的方法不會拋出異常,它們只會返回false。

有沒有一種方法來編程檢測鎖定文件和持有鎖的進程的名稱?或者,如果任何人有關於如何去調試諸如此類的問題的其他建議,請發送它們。

謝謝, 唐

+1

很難說沒有看到任何代碼。在黑暗中刺幾下:當您打開Windows的文件資源管理器並查看相關文件時,您可能無法刪除它,因爲資源管理器正在鎖定該文件。你確定你正在關閉IO流嗎?不吞嚥可能提供線索爲什麼失敗的異常? – 2010-08-13 07:58:49

回答

1

Handle可以讓你找出什麼進程對文件句柄。

樣本輸出(這是一個命令行實用程序):

C:\Users\Jon\Downloads\Handle>handle Test.cs 

Handle v3.42 
Copyright (C) 1997-2008 Mark Russinovich 
Sysinternals - www.sysinternals.com 

Test.exe   pid: 6088 190: C:\Users\Jon\Test\Test.cs 
+0

我不認爲這會對我有很大幫助,因爲在我啓動程序之前我不知道哪個文件將無法被刪除(或重命名)。 – 2010-08-13 09:08:01

+1

@Don:所以你之後運行它......機會是相同的過程仍然會持有資源。 – 2010-08-13 12:56:17