java - 从Java删除目录时出现奇怪的错误: 0 bytes,访问被拒绝

标签 java lotus-notes lotus-domino lotusscript

我编写了递归删除目录及其内容的方法。 代码在 Windows - Eclipse - JVM7 上执行

代码如下:

    /**
 * Empty and delete a folder with recursion.
 * 
 * @param folder
 *            folder to empty
 */
public static boolean rmdir(final String folderPath, boolean deleteParent) {
    File folder = new File(folderPath);

    // check if folder file is a real folder
    if (folder.isDirectory()) {
        File[] list = folder.listFiles();

        if (list != null) {
            for (int i = 0; i < list.length; i++) {
                File tmpF = list[i];
                if (tmpF.isDirectory())
                    rmdir(tmpF.toString(), true);

                tmpF.delete();
            }
        }

        if (deleteParent && !folder.delete()) {
            return false;
        } else
            return true;
    }

    return false;
}

当代码执行时,没有抛出错误,表示目录已成功删除。 当我打开驱动器确认删除时,我仍然可以看到该文件夹​​现在大小为 0 字节,并在尝试打开它时出现“访问被拒绝”错误。

Directory properties

Directory security

编辑:

我是管理员,拥有所有权限,并且可以从 Windows 资源管理器读/写此文件夹(在 Java 破坏它之前)。 我的问题是有人以前见过这个吗?这可能是什么原因?

还有一件事: 似乎该目录立即设置为“DeleteOnExit”而不是“Delete”。 因为当程序结束时Lotus Notes或Eclipse目录就消失了。

最佳答案

好的,我已经解决了这个问题...

我不是 Java 问题,而是 Lotus Notes/Domino 问题。

这是长句子:

当 Lotus Notes/Domino 线程使用 LotusScript mkdirrmdir 和其他 IO 方法创建文件夹“A”和其中的一些文件,然后执行 Java VM 尝试删除文件夹“A”及其中的所有文件时,父线程 (Lotus Notes/Domino) 会损坏并丢失目录结构句柄,从而导致上述错误。

问题的解决方案是 Java 完成文件夹删除后的简单 Dir$() 语句。 当执行 Dir$() 时,幻影文件夹消失。 可能是因为 Dir$() 调用刷新并释放了应该在内部刷新和释放的内容。

关于java - 从Java删除目录时出现奇怪的错误: 0 bytes,访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24699854/

相关文章:

java - 为了在 Netty 中重用客户端连接(获取 "Connection reset by peer"),我需要监听哪些事件?

java - 不使用 <form> html 标签调用 GET 方法

java - 由 XPages 中的 : java. lang.NoClassDefFoundError: org/apache/log4j/Logger 引起

lotus-notes - 从工作区中删除数据库引用

jquery - 防止退格按钮导航回上一个 XPage

java - firestorm dao 替换的建议

Java while循环打印平方数不能使用int?

javascript - Lotus Notes JavaScript 获取用户信息

java - 使用 lotus.domino 在 Notes 文档中插入图像/文件

java - Web 服务消费者抛出 faultCode : {http://www. lotus.com/domino/ws/}HTTP