linux c 删除非空目录
Linux下系统api int rmdir(const char *pathname);可以删除目录。但使用rmdir函数时,目录必须为空,否则调用失败,函数返回-1,执行成功时,函数返回0。
也可以通过shell命令rm -rf删除掉非空目录。但在程序中若要调用shell命令必须通过system或者exec函数簇启动一个进程。这样一是耗费系统资源,降低程序执行的效率。二是无法知道执行的结果。故自己实现一个删除非空目录的函数,下面是函数的几个要点:
1.若要删除一个目录,必须将给目录下的文件全部删除,系统调用int remove(const char * pathname)可以删除一个普通文件;
2.需要遍历目录中的每一项,而目录中可能还有目录,故需要用递归调用;
3.每个目录下会有两个默认的目录.和..分别代表当前目录和上一目录,在遍历的时候需要忽略它们;
4.递归结束的条件是遍历到的文件为普通文件(此时会将普通文件删除);
5.当一个目录中的内容全部被删除之后,便可以删除该目录了。
代码实现如下所示:
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>/**
* 递归删除目录(删除该目录以及该目录包含的文件和目录)
* @dir:要删除的目录绝对路径
*/
int remove_dir(const char *dir)
{char cur_dir[] = ".";char up_dir[] = "..";char dir_name[128];DIR *dirp;struct dirent *dp;struct stat dir_stat;// 参数传递进来的目录不存在,直接返回if ( 0 != access(dir, F_OK) ) {return 0;}// 获取目录属性失败,返回错误if ( 0 > stat(dir, &dir_stat) ) {perror("get directory stat error");return -1;}if ( S_ISREG(dir_stat.st_mode) ) { // 普通文件直接删除remove(dir);} else if ( S_ISDIR(dir_stat.st_mode) ) { // 目录文件,递归删除目录中内容dirp = opendir(dir);while ( (dp=readdir(dirp)) != NULL ) {// 忽略 . 和 ..if ( (0 == strcmp(cur_dir, dp->d_name)) || (0 == strcmp(up_dir, dp->d_name)) ) {continue;}sprintf(dir_name, "%s/%s", dir, dp->d_name);remove_dir(dir_name); // 递归调用}closedir(dirp);rmdir(dir); // 删除空目录} else {perror("unknow file type!"); }return 0;
}
linux c 删除非空目录相关推荐
- 删除非空目录linux_如何在Linux中删除空的非空目录
删除非空目录linux Linux file system consist of directories. A system administrator generally work with dir ...
- php 递归创建目录、递归删除非空目录、迭代创建目录
递归创建目录 方法一 1 function mk_dir($path){ 2 if(is_dir($path)){ //参数本身是一个目录 3 return true; 4 } 5 6 if(is_d ...
- Dos下删除(非)空目录或文件
[删除非空文件夹]: 在xp中的虚拟dos也就是开始运行cmd啦,是可以输入中文的,要删除非空文件夹请用rmdir /s /q命令 删除非空目录:RMDIR [/S] [/Q] [drive:]pat ...
- C++递归删除非空目录所有文件
今天在写C++代码时,遇到一个小问题,也是搞了一下午才解决(惭愧),就是在某个目录下,保存的相同名称的图片没有自动覆盖,意思就是多次运行相同的程序,如果某个文件(名)存在的话,那么这个文件则不会被覆盖 ...
- windows强制删除非空目录
在Windows系统中,可以使用「rd」命令强制删除非空目录. 使用方法: 打开命令提示符窗口(Windows键 + R,输入cmd,回车) 输入「rd /s /q 目录名」(例如「rd /s /q ...
- php函数删除非空目录,删除文件夹(非空目录)及其中所有文件的思路及源代码
在MFC中没有提供API函数删除非空文件夹 A(目录),所以要想删除一个非空文件夹(目录)必须先删除里面的文件. 这里需要注意一个问题,如果非空文件夹(目录)下还有文件夹(目录)AA: 1.如果文件夹 ...
- php如何删除非空目录,php怎样删除非空目录_后端开发
php删除非空目次的要领:起首自定义一个delDir函数:然后遍历目次,读出目次中的文件或文件夹:接着将目次下的文件与当前目次相连:末了递归挪用删除子目次,并运用"rmdir"函数 ...
- linux删除非空目录
Linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中. 直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r 就是向下递归,管理有多少级目 ...
- linux删除目录是显示非空,Linux删除非空目录
flask笔记1-安装 1.创建应用的根目录: 2.在根目录下创建独立的虚拟python运行环境,创建完成后当前目录会有一个文件夹,即该独立环境(使用--no-site-pachages参数将不会复制 ...
最新文章
- [学习笔记]CDQ分治
- 心动的本质是什么_《心动的信号3》:在“烟火气”里嗑糖,素人恋爱究竟有多上头?...
- leetcode 37. 解数独 思考分析
- java +号变空格_base64码通过http传输 +号变 空格 问题解决
- 谷歌浏览器怎么截图 Google Chrome截图方法
- Keil(MDK-ARM-STM32)系列教程(七)菜单
- uva11609(组合数学,快速幂)
- 以房养老骗局高发,背后套路何在?
- 杭电 1272 并查集判断环
- php 导入excal,php导入excel php使用phpexcel导入excel文件
- 关于php后台的知识,xfplay影音先锋画面声音不同步的处理教程 爱狐网 (‾◡◝)...
- 无人机航模新手100 问
- List集合过滤不符合条件的数据
- x265使用方法与命令行解析
- GitHub 的 Action 如何禁用
- python tkinter 表格 怎么设置字体大小_Tkinter动态字体大小更改
- 【hadoop】汽车销售数据统计分析项目(部分)
- 安装Dev c++后,编译文件出现未编译的解决方法
- easypoi 列合并_EasyPOI
- 博云开源项目FabEdge成为CNCF沙箱级项目
热门文章
- MediaWiki 1.19.2 发布 - 开源 Wiki 系统
- Segment Routing — SRv6 — 转发原理
- Service Mesh — Overview
- IPv6 — Multi-homing(多宿主/多链路/多归属)
- 互联网协议 — TCP — 重传机制(可靠传输保障)
- Linux 操作系统原理 — 日志结构的文件系统与日志文件系统
- 2019年企业云呈现五大技术发展趋势
- DevExpress中透明玻璃效果
- 解决 DNS general: warning: *** POKED TIMER ***
- Asp.net,C# 加密解密字符串