C++ 和JAVA递归遍历删除目录

JAVA:

import java.io.File;

public class DeleteDirectory {
    /**
     * 删除空目录
     * @param dir 将要删除的目录路径
     */
    private static void doDeleteEmptyDir(String dir) {
        boolean success = (new File(dir)).delete();
        if (success) {
            System.out.println("Successfully deleted empty directory: " + dir);
        } else {
            System.out.println("Failed to delete empty directory: " + dir);
        }
    }

    /**
     * 递归删除目录下的所有文件及子目录下所有文件
     * @param dir 将要删除的文件目录
     */
    private static boolean deleteDir(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            //递归删除目录中的子目录下
            for (int i=0; i<children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }
        // 目录此时为空,可以删除
        return dir.delete();
    }
    /**
     *测试
     */
    public static void main(String[] args) {
//        doDeleteEmptyDir("D:\\jsoup");
        String newDir2 = "D:\\jsoup";
        boolean success = deleteDir(new File(newDir2));
        if (success) {
            System.out.println("Successfully deleted populated directory: " + newDir2);
        } else {
            System.out.println("Failed to delete populated directory: " + newDir2);
        }     
    }
}

 

C++

// AA.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <direct.h>
#include <iostream>  
#include <windows.h>  
#include <string>
using namespace std;  


BOOL IsDirectory(const char *pDir)
{
    char szCurPath[500];
    ZeroMemory(szCurPath, 500);
    sprintf_s(szCurPath, 500, "%s//*", pDir);
    WIN32_FIND_DATAA FindFileData;
    ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATAA));

    HANDLE hFile = FindFirstFileA(szCurPath, &FindFileData); /**< find first file by given path. */

    if (hFile == INVALID_HANDLE_VALUE)
    {
        FindClose(hFile);
        return FALSE; /** 如果不能找到第一个文件,那么没有目录 */
    }
    else
    {
        FindClose(hFile);
        return TRUE;
    }

}


BOOL DeleteDirectory(const char * DirName)
{
    //    CFileFind tempFind;        //声明一个CFileFind类变量,以用来搜索
    char szCurPath[MAX_PATH];        //用于定义搜索格式
    _snprintf(szCurPath, MAX_PATH, "%s//*.*", DirName);    //匹配格式为*.*,即该目录下的所有文件
    WIN32_FIND_DATAA FindFileData;
    ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATAA));
    HANDLE hFile = FindFirstFileA(szCurPath, &FindFileData);
    BOOL IsFinded = TRUE;
    while (IsFinded)
    {
        IsFinded = FindNextFileA(hFile, &FindFileData);    //递归搜索其他的文件
        if (strcmp(FindFileData.cFileName, ".") && strcmp(FindFileData.cFileName, "..")) //如果不是"." ".."目录
        {
            std::string strFileName = "";
            strFileName = strFileName+DirName + "//" + FindFileData.cFileName;
            std::string strTemp;
            strTemp = strFileName;
            if (IsDirectory(strFileName.c_str())) //如果是目录,则递归地调用
            {
                printf("\n\r目录为:%s", strFileName.c_str());
                DeleteDirectory(strTemp.c_str());
            }
            else
            {
                DeleteFileA(strTemp.c_str());
            }
        }
    }
    FindClose(hFile);

    BOOL bRet = RemoveDirectoryA(DirName);
    if (bRet == 0) //删除目录
    {
        printf("删除%s目录失败!/n", DirName);
        return FALSE;
    }
    return TRUE;
}

void pri(BOOL flag){
    cout<<flag;
    if(flag){
        cout<< "是文件夹";
    }else{
        cout<< "不是文件夹";
    }  
}

//创建
BOOL create(string dirName){
 //string fileName = "C:\\test1.txt";
 BOOL flag=CreateDirectory(dirName.c_str(),NULL);
 return flag;
}

//删除
BOOL del(string path){  
 BOOL flag = RemoveDirectory(path.c_str());   
 return flag;
}

int main() {  
  std::string s = "C:\\Dev";
  string a="2018年9月26日";
  string b="113913";
  s = s+"//"+a+b;
 const char* c_doc = s.c_str();  
 //BOOL flag =create("C:\\test");  
 /* BOOL flag =del("C:\\test");*/
 IsDirectory(c_doc);
 DeleteDirectory(c_doc);
 cout<<"处理完成";
 system("pause");
 return 0;  
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值