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 ;
}