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

原创 2013年12月05日 16:53:21

 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个文件夹,经过测试是可以的
效果如下

相关文章推荐

C语言清空文件内容

C语言中清空文件的方法很简单。 只要以 可写 的方式打开文件,就能将这个文件清空...

删除空目录批处理文件

  • 2013年06月05日 15:02
  • 511B
  • 下载

MFC删除非空目录

  • 2012年09月18日 19:05
  • 2KB
  • 下载

遭遇oracle表空文件大小限制

ORACLE的一个数据文件的最大值是多少呢? 我们知道ORACLE的最小的物理单位是BLOCK,数据文件的组成的最终形式也是block,那么数据文件的大小限制就应该是block数量的限制,那么究竟b...

Xcode空文件.zip文件

  • 2015年08月13日 11:52
  • 10KB
  • 下载

空文件查找软件

  • 2014年08月14日 11:07
  • 3.06MB
  • 下载

删除空目录和空文件

#-*- coding:cp936 -*-"""os.walk()函数声明:walk(top,topdown=True,onerror=None)1>参数top表示需要遍历的目录树的路径2>参数top...

Xcode6添加空文件项目

  • 2015年06月25日 18:55
  • 372KB
  • 下载

非递归删除非空目录(源代码)

  • 2012年04月22日 11:26
  • 4KB
  • 下载

Ganymed SSH-2 for Java系列7之删除远程服务器上的非空目录(方法说明)

首先大家看看这段java代码的打印结果: Vector v1 = sftpClient.ls(remoteDerectory); for (Iterator iterator2 = v1....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言删除空目录及空文件
举报原因:
原因补充:

(最多只允许输入30个字)