#include
#include
#include
#include
#include
#include
#include
#include
#include
#define NAMESIZ 1024
int delefile(char *strname);
int main(int args,char **argv)
{
if(args < 2)
{
printf("使用方法:./a.out filename\n");
return -1;
}
char strname[NAMESIZ];
strcpy(strname,argv[1]);
delefile(strname);
return 0;
}
int delefile(char *strname)
{
char sname[NAMESIZ];
strcpy(sname,strname);
struct stat st;
lstat(sname,&st);
//如果不是目录直接删除
if(!S_ISDIR(st.st_mode))
{
unlink(sname);
}
//如果是目录
else
{
DIR *dp = NULL;
struct dirent *dd = NULL;
//打开目录
dp = opendir(sname);
rewinddir(dp);
while(1)
{
//读取目录
dd = readdir(dp);
//如果目录指针为空,跳出循环
if(dd == NULL)
{
break;
}
if((strncmp(dd->d_name,".",1) == 0 && strlen(dd->d_name) == 1) || strncmp(dd->d_name,"..",2) == 0)
{
continue;
}
else
{
//获得新路径
char ssname[NAMESIZ];
bzero(ssname,NAMESIZ);
strcpy(ssname,sname);
strcat(ssname,"/");
strcat(ssname,dd->d_name);
//递归调用
delefile(ssname);
}
}
closedir(dp);
rmdir(sname);
}
return 0;
}