自己用代码实现非空目录的删除(java及C语言)

来源:互联网 发布:皇家猫粮淘宝假货多吗 编辑:程序博客网 时间:2024/04/28 22:05

今天没什么事,就随便写了写代码,用代码实现删除非空目录。在java或c语言中,是没有直接的函数能够调用而且实现非空目录的删除。以下是我的代码实现 ,经过测试!


Java代码

import java.io.File ;import java.io.IOException ;public class DeleteDir{public static void main(String args[]){File my = new File("d:" + File.separator + "share") ;// 操作路径 :D:/share DeleteDirectory(my);}public static void DeleteDirectory(File file)    {           if(file!=null)           {// 判断对象是否为空                 if(file.isDirectory()&&(file.listFiles().length > 0))                 {// 如果是目录            File f[] = file.listFiles() ;//得到所有的文件             if(f!=null)                            {// 判断此目录能否列出            for(int i=0;i<f.length;i++)            {                                                                           // System.out.println(f[i]);                                DeleteDirectory(f[i]) ;// 因为给的路径有可能是目录,所以,继续判断                                }                              }     } file.delete();// 删除文件 //注意不要加else ,加了else之后,share下的目录下的目录文件被删除后,就没有删除空文件夹了         }     }};
C代码以windows下的实现:

#include <windows.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define  FILE_SIZE 1024int  DirectoryDelete(char * Path){ WIN32_FIND_DATA FindData; HANDLE hError; char FilePathName[FILE_SIZE]; char FullPathName[FILE_SIZE]; int FileCount = 0; strcpy(FilePathName, Path); strcat(FilePathName, "\\*.*"); hError = FindFirstFile(FilePathName, &FindData); if (hError == INVALID_HANDLE_VALUE) {  printf("查找文件失败!");  return 0; } while (FindNextFile(hError, &FindData)) {       // 构成绝对路径   wsprintf(FullPathName, "%s\\%s", Path,FindData.cFileName);   // 过虑.和..//其实中有..了,.已经在上面过虑掉了。   if (strcmp(FindData.cFileName, ".") == 0    || strcmp(FindData.cFileName, "..") == 0 )  {RemoveDirectory(FullPathName);continue;  }   // 输出文件名或文件夹名  printf("%s \n ", FullPathName);  if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//如果是目录   {   DirectoryDelete(FullPathName);  }  else  {   DeleteFile(FullPathName);//文件   }  }FindClose(hError); //关闭操作符,如果不关闭,在文件夹下的文件被删除完后,此文件夹虽然为空,但是还是不能删除的 RemoveDirectory(Path);//删除空文件夹 return 0;}int  main(){  char filePath[FILE_SIZE];  while(fgets(filePath,sizeof(filePath),stdin) != NULL){//输入文件名,为绝对路径 filePath[strlen(filePath) - 1] =0;RemoveDirectory(filePath);DirectoryDelete(filePath);printf("**********\n");  }  return 0;}

C代码在linux_ubuntu下的实现,经测试后的代码:

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


原创粉丝点击