gpt4 book ai didi

Java7 WatchService - 尝试删除递归监视的嵌套目录时出现拒绝访问错误(仅限 Windows)

转载 作者:太空狗 更新时间:2023-10-29 22:55:28 24 4
gpt4 key购买 nike

我关注了 Watching a Directory for Changes 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 的监视子树功能,这有助于绕过此问题,因为它只创建一个文件句柄。

关于Java7 WatchService - 尝试删除递归监视的嵌套目录时出现拒绝访问错误(仅限 Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com