java 非空删除文件夹,自个儿用代码实现非空目录的删除(java及C语言)

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

今天没什么事,就随便写了写代码,用代码实现删除非空目录。在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

{

// System.out.println(f[i]);

DeleteDirectory(f[i]) ;// 因为给的路径有可能是目录,所以,继续判断

}

}

}

file.delete();// 删除文件 //注意不要加else ,加了else之后,share下的目录下的目录文件被删除后,就没有删除空文件夹了

}

}

};C代码以windows下的实现:

#include

#include

#include

#include

#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

#include

#include

#include

#include

#include

#include

#include

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值