java - 在使用 smbd 或 ssh 协议删除任何目录之前,我是否必须递归删除所有文件和文件夹?
问题描述
我尝试使用 SMBD 客户端删除远程 Linux 机器中的目录:
DiskShare.rmdir(folderName, true);
在使用 smbd 或其他协议(ssh 协议)删除任何目录之前,我是否必须递归删除所有文件和文件夹?
如果是 - 为什么?
解决方案
为了删除一个目录(至少在 Unix 上),它必须是空的。如果不是,系统调用将失败并显示ENOTEMPTY
or EEXIST
。这意味着,是的,您需要在删除目录本身之前递归地删除其中的所有文件和目录。在您的情况下,可能有一种方便的方法可以做到这一点(例如递归删除函数),或者您可能需要自己实现它。
原因是系统调用,如rmdir
,通常被认为是相当有效且易于推理的。必须删除文件和包含的目录以保持文件系统一致;毕竟,如果由于父目录将不再存在而无法访问它们,您将不希望它们消耗磁盘空间。
如果rmdir
隐式删除它们,那可能会很昂贵,因为可能有很多文件和目录要删除,而且也很难推理,因为如果删除其中一个失败,您将不知道是哪一个它是,只有一个错误代码来代表整个失败。
至少 SFTP协议没有提供递归删除数据的方法,但您的库可以。在您的特定示例中,true
参数似乎是递归删除标志,因此您指定的函数调用将删除目录及其所有内容;您无需单独执行此操作。如果您使用的是等效的 SFTP 客户端,看起来它本身并没有实现,所以您需要这样做。
推荐阅读
- arrays - 在 C 中制作随机整数数组时的奇怪问题
- node.js - 我从 Node.js 服务器调用 APNS 通知时遇到问题。这是我要回来的错误
- powerbi - COALESCE 和 DIVIDEs 交替结果有什么区别?
- c# - 将两个数字之间的所有数字相加
- python - Python:将循环变量相乘的 C 代码 for 循环
- django - 无效的 HTTP_HOST 标头:“127.0.0.1:8000”。您可能需要将“127.0.0.1”添加到 ALLOWED_HOSTS。在 Django
- c++ - 显式模板实例化和调试加载时间
- python - 在 python 中通过比较来加速函数
- jquery - 向动态 JSON 值添加类
- php - 仅针对具有处理状态的已付款订单发送 WooCommerce 新订单电子邮件通知