目錄表

, , ,

Windows上移動檔案發生非預期的AccessDeniedException

Problem

我們有個功能會透過web上傳到壓縮檔到server side,接著解壓縮,最後將解壓縮的資料夾移動到某個目錄。某天發現這個功能會隨機發生移動失敗的問題,最早我使用的API像這樣:

File src = new File("src");
File dest = new File("dest");
boolean result = src.renameTo(dest);
然而這種作法只能知道成功或失敗,並無法知道原因;因此我將做法改為:
File src = new File("src");
File dest = new File("dest");
try {
	Files.move(src, dest);
} catch( Exception e ) {
	// handle exception
}
最後接到一個沒有原因的AccessDeniedException。

Debug & Workaround

我做過以下推測與實驗:


我在想會不會是JDK的bug,結果發現有人說: 可能是防毒軟體搞的鬼。於是我又做了以下實驗:

這只是一個可能性,並不是絕對的。最後有幾種解決方式(workaround):

Reference