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 删除非空目录相关推荐

  1. 删除非空目录linux_如何在Linux中删除空的非空目录

    删除非空目录linux Linux file system consist of directories. A system administrator generally work with dir ...

  2. php 递归创建目录、递归删除非空目录、迭代创建目录

    递归创建目录 方法一 1 function mk_dir($path){ 2 if(is_dir($path)){ //参数本身是一个目录 3 return true; 4 } 5 6 if(is_d ...

  3. Dos下删除(非)空目录或文件

    [删除非空文件夹]: 在xp中的虚拟dos也就是开始运行cmd啦,是可以输入中文的,要删除非空文件夹请用rmdir /s /q命令 删除非空目录:RMDIR [/S] [/Q] [drive:]pat ...

  4. C++递归删除非空目录所有文件

    今天在写C++代码时,遇到一个小问题,也是搞了一下午才解决(惭愧),就是在某个目录下,保存的相同名称的图片没有自动覆盖,意思就是多次运行相同的程序,如果某个文件(名)存在的话,那么这个文件则不会被覆盖 ...

  5. windows强制删除非空目录

    在Windows系统中,可以使用「rd」命令强制删除非空目录. 使用方法: 打开命令提示符窗口(Windows键 + R,输入cmd,回车) 输入「rd /s /q 目录名」(例如「rd /s /q ...

  6. php函数删除非空目录,删除文件夹(非空目录)及其中所有文件的思路及源代码

    在MFC中没有提供API函数删除非空文件夹 A(目录),所以要想删除一个非空文件夹(目录)必须先删除里面的文件. 这里需要注意一个问题,如果非空文件夹(目录)下还有文件夹(目录)AA: 1.如果文件夹 ...

  7. php如何删除非空目录,php怎样删除非空目录_后端开发

    php删除非空目次的要领:起首自定义一个delDir函数:然后遍历目次,读出目次中的文件或文件夹:接着将目次下的文件与当前目次相连:末了递归挪用删除子目次,并运用"rmdir"函数 ...

  8. linux删除非空目录

    Linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中. 直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r 就是向下递归,管理有多少级目 ...

  9. linux删除目录是显示非空,Linux删除非空目录

    flask笔记1-安装 1.创建应用的根目录: 2.在根目录下创建独立的虚拟python运行环境,创建完成后当前目录会有一个文件夹,即该独立环境(使用--no-site-pachages参数将不会复制 ...

最新文章

  1. [学习笔记]CDQ分治
  2. 心动的本质是什么_《心动的信号3》:在“烟火气”里嗑糖,素人恋爱究竟有多上头?...
  3. leetcode 37. 解数独 思考分析
  4. java +号变空格_base64码通过http传输 +号变 空格 问题解决
  5. 谷歌浏览器怎么截图 Google Chrome截图方法
  6. Keil(MDK-ARM-STM32)系列教程(七)菜单
  7. uva11609(组合数学,快速幂)
  8. 以房养老骗局高发,背后套路何在?
  9. 杭电 1272 并查集判断环
  10. php 导入excal,php导入excel php使用phpexcel导入excel文件
  11. 关于php后台的知识,xfplay影音先锋画面声音不同步的处理教程 爱狐网 (‾◡◝)...
  12. 无人机航模新手100 问
  13. List集合过滤不符合条件的数据
  14. x265使用方法与命令行解析
  15. GitHub 的 Action 如何禁用
  16. python tkinter 表格 怎么设置字体大小_Tkinter动态字体大小更改
  17. 【hadoop】汽车销售数据统计分析项目(部分)
  18. 安装Dev c++后,编译文件出现未编译的解决方法
  19. easypoi 列合并_EasyPOI
  20. 博云开源项目FabEdge成为CNCF沙箱级项目

热门文章

  1. MediaWiki 1.19.2 发布 - 开源 Wiki 系统
  2. Segment Routing — SRv6 — 转发原理
  3. Service Mesh — Overview
  4. IPv6 — Multi-homing(多宿主/多链路/多归属)
  5. 互联网协议 — TCP — 重传机制(可靠传输保障)
  6. Linux 操作系统原理 — 日志结构的文件系统与日志文件系统
  7. 2019年企业云呈现五大技术发展趋势
  8. DevExpress中透明玻璃效果
  9. 解决 DNS general: warning: *** POKED TIMER ***
  10. Asp.net,C# 加密解密字符串