分页: 1 / 1

linux下删除非空文件夹

发表于 : 2008-12-08 19:16
weihua2008
linux的有删除文件夹的命令rmdir -rf*
但是我想用程序删除文件夹,同样提供了函数rmdir但是她只能删除空文件夹
我想删除非空文件夹,有没有好的想法

Re: linux下删除非空文件夹

发表于 : 2008-12-08 22:21
HuntXu
rm就可以了

Re: linux下删除非空文件夹

发表于 : 2008-12-08 22:30
32idea
rm -rf ,后面空格跟路径名,慎用

Re: linux下删除非空文件夹

发表于 : 2008-12-08 22:51
xyywll
人家问的是系统编程级呢,不是用命令,呵呵
我看了下 rm 的实现,用的应该是一个目录栈
lz 可以参考 coreutils 源代码里面的 rm.c

Re: linux下删除非空文件夹

发表于 : 2008-12-08 23:28
xyywll
我的一个简单思路:
假设需要删除的目录为 a
1. 广度优先遍历将该目录开始的所有目录压栈
2. 对栈顶的目录,unlink 掉其所有记录(除 "." 和 "..")
3. rmdir 栈顶的目录
4. 出栈
5. 栈非空,则跳到 2;否则结束

Re: linux下删除非空文件夹

发表于 : 2008-12-09 0:07
xhy
建议参考busybox的源码

伪代码如下:

出错处理和.以及..目录的排除自己加

代码: 全选

rm_re(path)
{
    if (is_dir(path)) {
        dp = opendir(path);
        while ( (d=readdir(path)) != NULL ) {
            new_path = path + dp->d_name;
            rm_re(new_path);
            rmdir(new_path);
        }
    } else {
        unlink(path);
    }
}

Re: linux下删除非空文件夹

发表于 : 2008-12-09 0:17
xyywll
xhy 兄递归的方法比较直观

Re: linux下删除非空文件夹

发表于 : 2008-12-09 10:38
weihua2008
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
if(rmdir("./ds/ee")!=0)
printf("删除目录失败\n");
return 0;
}
我的删除撒总是失败?
还有哥几个说的有道理,但是我不知道,你们对"非空"是如何理解的,假若在我的./ds/ee下没有文件夹了但是有一个文件撒办?
qq上有位仁兄说用system函数实现挺好,system("rm -rf ./ds/ee")
这样也是可以的system("rm -rf ./ds/ee/weihua.c");
c语言中有一个库函数remove似乎感觉挺好,是文件的话会调用unlink(),是目录的话会调用rmdir()函数。还没有整明白,
待续

Re: linux下删除非空文件夹

发表于 : 2008-12-09 11:18
xyywll
rmdir 调用只能删除空目录
用 system 不叫自己写吧,呵呵,而且和原生的不一样吧,很多东西系统不提供的,system 也没用
非空就是 目录里面含有除 "." ".." 之外的记录

你可以看看系统编程里讲文件和目录的部分呀

Re: linux下删除非空文件夹

发表于 : 2008-12-09 15:56
weihua2008
好的,我写的好像有点不地道,是吧?
用 system 不叫自己写吧,呵呵,而且和原生的不一样吧,很多东西系统不提供的,system 也没用
这话我有点不是很懂
1." 不叫自己写的吧"你是说我调用用了系统函数不是自己写的,不是自己的想法?
2."不是原生的",是我的删除路径的函数不是原生的还是system函数用的不是原生的?
3.system也没用哪?
删除路径跟删除文件夹不一样吗?若是空的话,直接删除,若不是空的话,将它清空再删除,
我再想想

Re: linux下删除非空文件夹

发表于 : 2008-12-12 14:06
codeprince
rm -rf 文件名 man rm 一定行!

Re: linux下删除非空文件夹

发表于 : 2009-01-20 10:00
yinhang8848
:em20 上面是C程序代码吗?

Re: linux下删除非空文件夹

发表于 : 2009-01-20 10:10
lerosua
好多人没看明白楼主的问题就回答了

Re: linux下删除非空文件夹

发表于 : 2009-01-20 10:17
poet
weihua2008 写了:linux的有删除文件夹的命令rmdir -rf*
但是我想用程序删除文件夹,同样提供了函数rmdir但是她只能删除空文件夹
我想删除非空文件夹,有没有好的想法
C程序只能通过写一个递归函数实现。

有很多其他的语言中有现成的实现。

Re: linux下删除非空文件夹

发表于 : 2010-12-03 22:12
wuhezhong
codeprince 写了:rm -rf 文件名 man rm 一定行!
偶认为正解,还是多用man和--help好处多多阿,原本用rmdir -p 递减删除来着,后来恼了,才知道非空目录的删除可以用rm -rf 删除,原来还以为rm只能删除文件呢。命令真的很强大阿。