目录文件删除

1、删除多个文件目录函数

(1)用可变参数的实现变参传递
依赖下列几个库函数(宏定义)的定义:
va_list //这是一个特殊的指针类型,指代栈中参数的开始地址
va_start(ap,T) //ap为va_list类型,T为函数第一个参数
va_args(ap,A) //ap为va_list类型,A为需要取出的参数类型,如int,char
va_end(ap) //ap为va_list类型。
(2)for循环遍历删除目录文件
参数:int argc 目录文件的个数
… 文件目录,字符串类型

#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<stdarg.h>
void rm_dir(int argc,...)
{	
	va_list args;
	va_start(args, argc);
	for(int i=0; i<argc; i++)
	{
		char* pathname = va_arg(args,char*);
		DIR* dp = opendir(pathname);
		if(NULL == dp)
		{
			printf("打开目录失败\n");
			return;
		}
		struct dirent* mp = NULL;
		while(mp = readdir(dp))
		{
			//拼接路径
			int len  = strlen(pathname) + strlen(mp->d_name) + 2;
			char* path = malloc(len);
			if(NULL == path)
			{
				printf("空间申请失败\n");
				return;
			}
			memset(path,0,len);
			snprintf(path,len,"%s/%s", pathname, mp->d_name);
			//判断是否为目录,为目录就进行迭代
			if(DT_DIR == mp->d_type)
			{
				if(strcmp(mp->d_name,".") == 0 || strcmp(mp->d_name,"..")==0)
					continue;
				rm_dir(1,path);
			}
			//删除除目录文件外的所有文件
			unlink(path);
			//释放堆空间
			free(path);
			path = NULL;
		}
		rmdir(pathname);
	}
	va_end(args);
	return ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值