在使用 smbd 或 ssh 协议删除任何目录之前,是否必须递归删除所有文件和文件夹?

问题描述

我尝试使用 SMBD 客户端删除远程 Linux 机器中的目录:

  diskShare.rmdir(folderName,true); 

在使用 smbd 或其他协议 - ssh 协议删除任何目录之前,我是否必须递归删除所有文件文件夹?

如果是 - 为什么?

解决方法

为了删除一个目录(至少在 Unix 上),它必须是空的。如果不是,系统调用将失败并显示 ENOTEMPTYEEXIST。这意味着,是的,您需要在删除目录本身之前递归删除其中的所有文件和目录。可能在您的情况下,有一种方便的方法可以做到这一点(例如递归删除函数),或者您可能需要自己实现。

原因是像 rmdir 这样的系统调用通常被认为是相当高效且易于推理的。必须删除文件和包含的目录以保持文件系统一致;毕竟,如果因为父目录不再存在而无法访问它们,您不会希望它们占用磁盘空间。

如果 rmdir 隐式删除它们,那可能会很昂贵,因为可能有很多文件和目录要删除,而且也很难推理,因为如果删除其中一个失败,你不知道是哪一个,只有一个错误代码代表整个失败。

至少 SFTP 协议 没有提供递归删除数据的方法,但您的库可以。在您的特定示例中, true 参数似乎是递归删除标志,因此您指定的函数调用将删除目录及其所有内容;您不需要单独执行此操作。如果您使用的是等效的 SFTP 客户端,则它本身似乎并未实现,因此您需要这样做。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...