![](/img/trans.png)
[英]Java7 WatchService - How to detect rename/move of the actual watched directory
[英]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,我得到所述拒絕訪問錯誤。 但是,如果我:
有沒有辦法使用nio2 WatchService遞歸地觀察嵌套目錄,但不能表現為程序正在訪問嵌套文件?
如果您正在Windows上查看目錄,那么WatchService實現具有該目錄的打開句柄(這就是Windows的工作方式)。 該打開句柄不會阻止刪除該目錄,但它會阻止立即刪除該目錄的父目錄。 刪除監視目錄后,句柄將關閉,但您可能會在句柄關閉之前嘗試刪除目錄。 當發生這種情況時,您將獲得拒絕的訪問權限。 如果你重試,我認為它適用於你,這是因為你重試時手柄將被關閉。
如果在register
調用中指定ExtendedWatchEventModifier.FILE_TREE
修飾符,則Windows上的Sun JRE可以使用Windows的監視子樹功能,這可以幫助繞過此問題,因為它只創建一個文件句柄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.