自己用代码实现非空目录的删除(java及C语言)
今天没什么事,就随便写了写代码,用代码实现删除非空目录。在java或c语言中,是没有直接的函数能够调用而且实现非空目录的删除。以下是我的代码实现 ,经过测试!
Java代码
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <dirent.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define PATH_LENGTH 1024#define LENGTH 1024void DeleteDir(char *);int main(int argc, const char *argv[]){ char filename[LENGTH]; char filepath[PATH_LENGTH]; if(NULL == getcwd(filepath,PATH_LENGTH)){//得到绝对当前文件的绝对路径 fprintf(stderr,"can't get current pwd\n"); return 1; } fgets(filename,sizeof(filename),stdin);//输入当前目录下的文件或目录名 filename[strlen(filename) - 1] = 0; strcat(filepath,"/"); strcat(filepath,filename); printf("%s\n",filepath); DeleteDir(filepath); return 0;}void DeleteDir(char *filename){ struct stat stbuf; char filepath[PATH_LENGTH]; if(stat(filename,&stbuf) == -1){ fprintf(stderr,"Can't Access %s\n",filename); return; } if((stbuf.st_mode&S_IFMT) == S_IFDIR){//如果是目录的情况 DIR *dfd; struct dirent *dp; if((dfd = opendir(filename)) == NULL){ fprintf(stderr,"can't open %s\n",filename); } while((dp = readdir(dfd)) != NULL){ if(strcmp(dp->d_name,".") == 0 ||strcmp(dp->d_name,"..") == 0){ continue; } strcpy(filepath,filename); strcat(filepath,"/"); printf("%s\n",dp->d_name); strcat(filepath,dp->d_name); DeleteDir(filepath);//递归调用 remove(filepath);//删除空目录 } remove(filename);//删除空目录 closedir(dfd); }else{//如果是文件的情况 strcpy(filepath,filename); strcat(filepath,"/"); printf("%s\n",filename); unlink(filename); }}