当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 15 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : linux下删除非空文件夹
帖子发表于 : 2008-12-08 19:16 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
linux的有删除文件夹的命令rmdir -rf*
但是我想用程序删除文件夹,同样提供了函数rmdir但是她只能删除空文件夹
我想删除非空文件夹,有没有好的想法


页首
 用户资料  
 
2 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-08 22:21 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
rm就可以了


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
3 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-08 22:30 
头像

注册: 2006-12-15 9:32
帖子: 1247
系统: linux
送出感谢: 2
接收感谢: 13
rm -rf ,后面空格跟路径名,慎用


页首
 用户资料  
 
4 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-08 22:51 

注册: 2008-05-24 1:24
帖子: 338
送出感谢: 0 次
接收感谢: 0 次
人家问的是系统编程级呢,不是用命令,呵呵
我看了下 rm 的实现,用的应该是一个目录栈
lz 可以参考 coreutils 源代码里面的 rm.c


_________________
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病


页首
 用户资料  
 
5 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-08 23:28 

注册: 2008-05-24 1:24
帖子: 338
送出感谢: 0 次
接收感谢: 0 次
我的一个简单思路:
假设需要删除的目录为 a
1. 广度优先遍历将该目录开始的所有目录压栈
2. 对栈顶的目录,unlink 掉其所有记录(除 "." 和 "..")
3. rmdir 栈顶的目录
4. 出栈
5. 栈非空,则跳到 2;否则结束


_________________
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病


页首
 用户资料  
 
6 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-09 0:07 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
建议参考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);
    }
}


_________________
目前负债150多万


页首
 用户资料  
 
7 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-09 0:17 

注册: 2008-05-24 1:24
帖子: 338
送出感谢: 0 次
接收感谢: 0 次
xhy 兄递归的方法比较直观


_________________
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病


页首
 用户资料  
 
8 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-09 10:38 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
#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()函数。还没有整明白,
待续


页首
 用户资料  
 
9 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-09 11:18 

注册: 2008-05-24 1:24
帖子: 338
送出感谢: 0 次
接收感谢: 0 次
rmdir 调用只能删除空目录
用 system 不叫自己写吧,呵呵,而且和原生的不一样吧,很多东西系统不提供的,system 也没用
非空就是 目录里面含有除 "." ".." 之外的记录

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


_________________
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病


页首
 用户资料  
 
10 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-09 15:56 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
好的,我写的好像有点不地道,是吧?
用 system 不叫自己写吧,呵呵,而且和原生的不一样吧,很多东西系统不提供的,system 也没用
这话我有点不是很懂
1." 不叫自己写的吧"你是说我调用用了系统函数不是自己写的,不是自己的想法?
2."不是原生的",是我的删除路径的函数不是原生的还是system函数用的不是原生的?
3.system也没用哪?
删除路径跟删除文件夹不一样吗?若是空的话,直接删除,若不是空的话,将它清空再删除,
我再想想


页首
 用户资料  
 
11 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2008-12-12 14:06 

注册: 2008-12-12 13:57
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
rm -rf 文件名 man rm 一定行!


页首
 用户资料  
 
12 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2009-01-20 10:00 
头像

注册: 2009-01-16 17:03
帖子: 96
送出感谢: 1
接收感谢: 0 次
:em20 上面是C程序代码吗?


页首
 用户资料  
 
13 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2009-01-20 10:10 
头像

注册: 2007-11-29 9:41
帖子: 8455
送出感谢: 0 次
接收感谢: 0 次
好多人没看明白楼主的问题就回答了


页首
 用户资料  
 
14 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2009-01-20 10:17 

注册: 2006-09-11 22:47
帖子: 2841
送出感谢: 0 次
接收感谢: 4
weihua2008 写道:
linux的有删除文件夹的命令rmdir -rf*
但是我想用程序删除文件夹,同样提供了函数rmdir但是她只能删除空文件夹
我想删除非空文件夹,有没有好的想法


C程序只能通过写一个递归函数实现。

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


页首
 用户资料  
 
15 楼 
 文章标题 : Re: linux下删除非空文件夹
帖子发表于 : 2010-12-03 22:12 
头像

注册: 2010-04-03 18:10
帖子: 111
送出感谢: 0 次
接收感谢: 0 次
codeprince 写道:
rm -rf 文件名 man rm 一定行!

偶认为正解,还是多用man和--help好处多多阿,原本用rmdir -p 递减删除来着,后来恼了,才知道非空目录的删除可以用rm -rf 删除,原来还以为rm只能删除文件呢。命令真的很强大阿。


_________________
我问佛:为何不给所有女子羞花闭月的容颜?
佛曰:那只是昙花的一现,用来蒙蔽世俗的眼
—————---/´ ¯/)
—————--/—-/
—————-/—-/
———--/´¯/'--'/´¯`•_
———-/'/--/—-/—--/¨¯\
——--('(———- ¯~/'--')
———\————-'—--/ 各类计算机在线书籍下载和在线浏览站点------->ppurl.com ------>首页下方有标签!
———-'\'————_-•´
————\———--(


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 15 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译