自己用代码实现非空目录的删除(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); }}
- 自己用代码实现非空目录的删除(java及C语言)
- C语言实现Linux下删除非空目录
- VC删除非空目录及所有文件的代码
- java实现递归删除非空目录
- c语言删除空目录及空文件
- 如何用JAVA删除一个非空的目录
- Java中删除非空目录;
- 删除非空目录
- asp删除非空目录的例子
- python删除非空目录的方法
- 删除文件夹(非空目录)
- C 实现删除非空文件夹
- C 调用API函数删除非空目录
- EVC删除非空目录
- 删除多级非空目录
- EVC删除非空目录
- EVC删除非空目录
- 删除非空目录文件夹
- 关于抽象工厂和工厂方法
- 素数查找算法
- java的环境变量设置
- Wireshark抓包工具使用简介
- 渐渐懂得
- 自己用代码实现非空目录的删除(java及C语言)
- 第 2堂作业(2)
- 基于stm32f103zet6的定时器的学习2(定时器上溢)
- 【linux问答】ubuntu root密码,SSH服务安装等常用操作
- 开始使用CSDN
- C语言中__DATE__,__TIME__,__FILE__和__LINE__的用途
- linux学习入门20——RPM软件包管理(linuxcast.net)(rpm 安装,验证等)
- 数据结构之顺序表,插入,删除等
- 我的电脑怎么了?图标都带影的、