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

mnowg1ta  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(344)

我已尝试使用smbd客户端删除远程linux计算机中的目录:

DiskShare.rmdir(folderName, true);

在使用smbd或其他协议(ssh协议)删除任何目录之前,是否必须递归删除所有文件和文件夹?
如果是,为什么?

e0bqpujr

e0bqpujr1#

要删除目录(至少在unix上),它必须为空。如果不是,则系统调用将失败 ENOTEMPTYEEXIST . 这意味着,是的,在删除目录本身之前,您需要递归地删除其中的所有文件和目录。在您的情况下,可能有一种方便的方法(例如递归删除函数),或者您可能需要自己实现它。
原因是系统调用 rmdir ,通常被认为是合理有效且易于推理的。必须删除文件和包含的目录,以保持文件系统的一致性;毕竟,如果由于父目录将不再存在而无法访问它们,您就不会希望它们占用磁盘空间。
如果 rmdir 隐式删除它们可能会很昂贵,因为可能有很多文件和目录要删除,而且也很难推理,因为如果删除其中一个失败,您将不知道它是哪一个,只有一个错误代码代表整个失败。
至少sftp协议没有提供递归删除数据的方法,但是您的库可能会这样做。在您的特定示例中 true 参数似乎是递归删除标志,因此您指定的函数调用将删除目录及其所有内容;你不需要分开做。如果您使用的是等效的sftp客户端,那么它本身似乎没有实现,因此您需要这样做。

相关问题