在linux上删除非空目录会有如下提示:
rmdir: “目录名”: 目录非空
由于已经习惯了长期使用rmdir命令,经常在删除某些目录时就手快不自觉打出这个命令,但是如果要删除的目录里跟了很多子目录,子目录里又有很多文件, 这个命令就不好使了,就会蹦一个目录非空的提示,linux系统下为了提高给开发人员效率,提供了这样的一个命令以供使用,
rm -rf 目录名
成功删除 这样就方便了很多,节省了很多时间,但是相应的我就想到了之前在做标准C和unix平台的系统调用都没有这样的一个函数可以用来删除非空的目录,其实这也是很多初学unix开发人员遇到的挺麻烦的问题,很多人会想到ftw
NAME ftw, nftw - file tree walk SYNOPSIS #include <ftw.h> int ftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag), int nopenfd); int nftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag, struct FTW*s), int nopenfd, int flags);
ftw只是遍历目录树而已吧,方向是从外层到里层的,而删除非空目录是要从里层到外层的。大部分代码还是要自己写。
所以要解决问题我觉得最好的办法还是用辅助栈
大概思路是这样吧:
遍历子目录,如果遇见非目录,就直接remove, 如果是目录,则放入栈中,然后继续搜索。 当最里层的目录为空时,退栈,逐个删除空目录。
rmdir () { opendir(); while (readdir()) { if (!dir) rm; else { rmdir(); rm; } } closedir(); }
我们再来看比较高级点的linux系统的这个命令
rm -rf 目录名
后面的-rf 表示的其实就是r为递归的删除子目录 f为强制执行。
0 条评论