自己用代码实现非空目录的删除(java及C语言)
2013-03-17 19:01
706 查看
今天没什么事,就随便写了写代码,用代码实现删除非空目录。在java或c语言中,是没有直接的函数能够调用而且实现非空目录的删除。以下是我的代码实现 ,经过测试!
Java代码
C代码在linux_ubuntu下的实现,经测试后的代码:
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 1024 int 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 1024 void 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); } }
相关文章推荐
- java实现递归删除非空目录
- C语言实现Linux下删除非空目录
- Java代码实现删除一个有序数组里面的重复元素
- java 递归实现删除或查询指定目录下的全部文件
- php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
- C#下实现创建和删除目录的实例代码
- Ganymed SSH-2 for Java系列7之删除远程服务器上的非空目录(方法说明)
- c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)
- Java 删除文件和目录代码
- java图片上传后台实现以及删除时删除目录
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
- java怎么创建目录(删除/修改/复制目录及文件)代码实例
- Java实现将目录下指定类型文件全部删除_FileFilter文件过滤
- 一个利用递归算法实现删除非空目录的函数
- Java非递归实现删除任意目录的方法
- java实现文件的上传、下载和删除的后台代码
- 使用java实现dos窗口文件操作命令(复制,删除,列出文件目录)
- Ganymed SSH-2 for Java系列7之删除远程服务器上的非空目录(方法说明)
- java图片上传后台实现以及删除时删除目录
- java代码实现根据JSON文件进行批量文件重命名或者改目录结构