c语言删除空目录及空文件

来源:互联网 发布:郑爽白莲花邪教知乎 编辑:程序博客网 时间:2024/04/30 10:15

 c语言删除空目录及空文件

  今天本来是要写个小程序来删除项目中生成的空目录和空文件的,不过又说不要了,下午得空还是找了点资料试了下

还是对一些系统函数不熟悉,一直在百度找函数的作用

 

#include <stdio.h>#include <sys/stat.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <dirent.h>#include <string.h>void error_quit(const char *msg)   //打印错误信息,并且退出{    perror(msg);    exit(-1);}void change_path(const char *path){if(chdir(path)==-1)  //同linux里面cd的作用 error_quit("chdir");}void rm_dir(const char *path){   int a=0;  FILE*fp;int  flag = 0; DIR *dir;struct dirent *dirp;struct stat buf;char *p=getcwd(NULL,0);//获取当前工作目录 if((dir=opendir(path))==NULL)//打开路径文件或是目录error_quit("OpenDir");change_path(path);while(dirp=readdir(dir))//本函数用来读取目录。返回是dirent结构体指针{     if((strcmp(dirp->d_name,".")==0) || (strcmp(dirp->d_name,"..")==0)){ a++;continue;} if(stat(dirp->d_name,&buf)==-1)//获取 dirp->d_name的文件状态,保存在buf结构体中 error_quit("stat");if(S_ISREG(buf.st_mode) )//功能是判断一个路径是否为文件 { if(buf.st_size == 0)  //如果文件为空就删掉{remove(dirp->d_name); //删除文件  }else{ continue ;} }else if(S_ISDIR(buf.st_mode) )//功能是判断一个路径是否为目录{   if ( a ==2)   //判断是否是空目录,空目录也是有两个目录的,与linux里面是一样的 . 和 ..文件{rm_dir(dirp->d_name); // 删除目录 这里不可以用remove,还不一样,目录和文件不一样的/*if(rmdir(dirp->d_name)==-1)error_quit("rmdir");printf("rm %s Successed . . .\n",dirp->d_name);*/continue;}else {continue;  }}//   if(remove(dirp->d_name)==-1)//   error_quit("remove");printf("rm %s Successed111111111111111 . . .\n",dirp->d_name);}closedir(dir);change_path(p);// if(rmdir(path)==-1)//    error_quit("rmdir");rmdir(path); printf("rm %s Successed222222222222222222222 . . .\n",path);}int main(int argc,char **argv){    //写全路径   ,删除文件夹1下面的空目录及空文件    rm_dir("C:/Documents and Settings/Administrator/My Documents/C-Free/Projects/remove文件夹/1");    return 0;}
在windows上测试过是可以的,满足条件了。效果如下图

  

2.在linux系统上  由于文件的读取顺序不一样 隐藏的 , .和.. 两个隐藏文件是后面读得,windows里面是首先读得

只要把if ( a ==2) 换成if ( a ==0 )  
就可以了,还有主函数调用的时候改变文件夹的路径的问题,现在当前目录是/tmp/test/1,我在文件夹1下面创建了2个文件夹,经过测试是可以的
效果如下

原创粉丝点击