簡體   English   中英

Java7 WatchService - 嘗試刪除遞歸監視的嵌套目錄時出現“拒絕訪問”錯誤(僅限Windows)

[英]Java7 WatchService - Access Denied error trying to delete recursively watched nested directories (Windows only)

我跟着的變化看目錄 Java7 NIO2教程遞歸監視使用代碼樣本目錄中的全部內容WatchDir.java

雖然這在Linux和Mac上運行良好,在Windows上(在Vista和7上測試),嘗試使用Windows資源管理器刪除嵌套的,已觀看的文件夾失敗,並顯示類似於“拒絕訪問:您需要獲得執行此操作的權限”的消息存在於其中一個嵌套目錄中。

例如,如果我在Windows中觀看嵌套文件夾樹:

-- Folder A
   -- Folder A1
      -- File F

並嘗試刪除文件夾A,我得到所述拒絕訪問錯誤。 但是,如果我:

  • 刪除文件夾A1然后刪除文件夾A.
  • 刪除文件F,然后刪除文件夾A.

有沒有辦法使用nio2 WatchService遞歸地觀察嵌套目錄,但不能表現為程序正在訪問嵌套文件?

如果您正在Windows上查看目錄,那么WatchService實現具有該目錄的打開句柄(這就是Windows的工作方式)。 該打開句柄不會阻止刪除該目錄,但它會阻止立即刪除該目錄的父目錄。 刪除監視目錄后,句柄將關閉,但您可能會在句柄關閉之前嘗試刪除目錄。 當發生這種情況時,您將獲得拒絕的訪問權限。 如果你重試,我認為它適用於你,這是因為你重試時手柄將被關閉。

如果在register調用中指定ExtendedWatchEventModifier.FILE_TREE修飾符,則Windows上的Sun JRE可以使用Windows的監視子樹功能,這可以幫助繞過此問題,因為它只創建一個文件句柄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM