遍历删除空文件夹

文章目录

    • 遍历删除空文件夹
    • 概述
    • 笔记
    • END

遍历删除空文件夹

概述

在手工整理openssl3.2编译完的源码工程中的文档, 其中有好多空文件夹.
做了一个小工具, 将空文件夹都遍历删除掉. 这样找文档方便一些.
删除后比对了一下, 空文件夹还真不少.
在这里插入图片描述

笔记

// EmptyDirRemove.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "pch.h"
#include "framework.h"
#include "EmptyDirRemove.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// 唯一的应用程序对象CWinApp theApp;using namespace std;CString get_moudle_path();
void DoMyTask();
void findDir(CString csDirPathName, CStringArray& csAryDirPathName);
void tryToDeleteEmptyDir(CStringArray& csAryDirPathName, CStringArray& csAryEmptyDirPathName);int main()
{int nRetCode = 0;HMODULE hModule = ::GetModuleHandle(nullptr);if (hModule != nullptr){// 初始化 MFC 并在失败时显示错误if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0)){// TODO: 在此处为应用程序的行为编写代码。wprintf(L"错误: MFC 初始化失败\n");nRetCode = 1;}else{// TODO: 在此处为应用程序的行为编写代码。DoMyTask();}}else{// TODO: 更改错误代码以符合需要wprintf(L"错误: GetModuleHandle 失败\n");nRetCode = 1;}_tprintf(_T("END\n"));system("pause");return nRetCode;
}void DoMyTask()
{// 安全措施// * 不允许在根目录下运行CString csTmp;CStringArray csAryDirPathName;CStringArray csAryEmptyDirPathName;int i = 0;do {// D:\my_dev\my_local_git_prj\soft\EmptyDirRemove\DebugcsTmp = get_moudle_path();if (csTmp.GetLength() <= 3){_tprintf(_T("危险 : 不允许在根目录下运行此程序\r\n"));}i = AfxMessageBox(_T("即将尝试删除本程序同级目录下的空文件夹, 是否继续?"), MB_OKCANCEL);if (IDOK != i){break;}findDir(csTmp, csAryDirPathName);do {_tprintf(_T("try %d\n"), ++i);tryToDeleteEmptyDir(csAryDirPathName, csAryEmptyDirPathName);if (0 == csAryEmptyDirPathName.GetCount()){break;}} while (true);} while (false);
}void tryToDeleteEmptyDir(CStringArray& csAryDirPathName, CStringArray& csAryEmptyDirPathName)
{csAryEmptyDirPathName.RemoveAll();INT_PTR cnt = csAryDirPathName.GetCount();INT_PTR cnt2 = 0;INT_PTR i = 0;INT_PTR j = 0;CString cs;for (i = 0; i < cnt; i++){cs = csAryDirPathName.GetAt(i);/*!* RemoveDirectory有个好特性, 如果目录非空, 是删除失败的* 所以可以用尝试删除的方法来删除文件夹, 不用怕, 放心大胆的搞:P*/if (RemoveDirectory(cs)){_tprintf(_T("remove dir : %s\n"), (LPCTSTR)cs);csAryEmptyDirPathName.Add(cs);}}// 将已经删除的文件夹名称从csAryDirPathName中移除cnt = csAryEmptyDirPathName.GetCount();for (i = 0; i < cnt; i++){cs = csAryEmptyDirPathName.GetAt(i);cnt2 = csAryDirPathName.GetCount();for (j = 0; j < cnt2; j++){if (cs == csAryDirPathName.GetAt(j)){csAryDirPathName.RemoveAt(j);break;}}}}void findDir(CString csDirPathName, CStringArray& csAryDirPathName)
{CFileFind finder;// build a string with wildcardsCString strWildcard(csDirPathName);strWildcard += _T("\\*.*");// start working for filesBOOL bWorking = finder.FindFile(strWildcard);while (bWorking){bWorking = finder.FindNextFile();// skip . and .. files; otherwise, we'd// recur infinitely!if (finder.IsDots())continue;// if it's a directory, recursively search itif (finder.IsDirectory()){CString str = finder.GetFilePath();// TRACE(_T("%s\n"), (LPCTSTR)str);csAryDirPathName.Add(str);findDir(str, csAryDirPathName);}}finder.Close();
}CString get_moudle_path()
{CString szCurPath(_T(""));GetModuleFileName(NULL, szCurPath.GetBuffer(MAX_PATH), MAX_PATH);szCurPath.ReleaseBuffer();return szCurPath.Left(szCurPath.ReverseFind(_T('\\')) + 1);
}

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442264.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣hot100 数组中的第K个最大元素 堆 三路划分

Problem: 215. 数组中的第K个最大元素 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) Code class Solution {public int findKthLargest(int[] nums, int k…

数据结构--堆排序(超详细!)

一、前言 堆排序与Top K问题是堆的两大应用&#xff0c;在我们日常也有很广泛的用处 我们已经上面已经说过了堆&#xff0c;这次来说堆的其中一个应用---堆排序。 二、堆排序 堆排序优势在哪里&#xff1f;有什么恐怖之处吗&#xff1f; 重点&#xff1a;拿一个举例&…

Java项目要不要部署在Docker里?

部署Java项目有很多种方式&#xff0c;传统的方式是直接在物理机或虚拟机上部署应用&#xff0c;但为什么现在容器化部署变得越来越流行&#xff0c; 个人觉得原因有以下几个&#xff1a; 1、 环境一致性&#xff1a;使用Docker可以确保开发、测试和生产环境的一致性&#xff…

使用libtorch实现sobel算子进行边缘检测,python和c++实现

文章目录 pythonpython结果 cppc结果 python import torch import torch.nn as nn from PIL import Image import numpy as np import cv2class SobelEdgeDetector(nn.Module):def __init__(self):super(SobelEdgeDetector, self).__init__()self.convx nn.Conv2d(1,1,3,padd…

植物病害检测YOLOV8,OPENCV调用

【免费】植物病害检测&#xff0c;10种类型&#xff0c;YOLOV8训练&#xff0c;转换成ONNX&#xff0c;OPENCV调用资源-CSDN文库 植物病害检测&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTH…

实现vue3响应式系统核心-shallowReactive

简介 今天来实现一下 shallowReactive 这个 API。 reactive函数是一个深响应&#xff0c;当你取出的值为对象类型&#xff0c;需要再次调用 reactive进行响应式处理。很明显我们目前的代码是一个浅响应&#xff0c;即 只代理了对象的第一层&#xff0c;也就是 shallowReactiv…

【java核心-IoC(控制反转)和DI(依赖注入)及AOP(面向切面编程)】

java核心-IoC&#xff08;控制反转&#xff09;和DI&#xff08;依赖注入&#xff09;及AOP&#xff08;面向切面编程&#xff09; 控制反转&#xff08;IoC&#xff09;依赖注入&#xff08;DI&#xff09;面向切面编程&#xff08;AOPAOP的应用场景包括但不限于&#xff1a;以…

安装和启动berTopic,hdbscan和importlib.metadata

1. 安装问题&#xff1a;hdbsacn 安装berTopic的时候&#xff0c;包 hdbsacn一直安装失败&#xff0c;报出以下错误&#xff1a; 尝试了很多办法&#xff1a;① 下载hdbscan的tar.gz文件安装&#xff0c;安装失败&#xff1b;② 安装*.whl文件&#xff0c;安装成功&#xff…

【C++初阶】C++入门(2)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、函数重载1.1 函数重载的概念1.2 函数重载的种类1.3 C支持函数重载的原理 二…

海外短剧系统国际短剧源码h5多语言版app挂载tiktok油管ins

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目 前言 一、海外短剧系统是什么&#xff1f; 二、海外短剧系统功能与运营方式介绍 1.系统功能 2.短剧APP运营方式 总结 前言 本文简单介绍海外短剧系统的功能&#xff…

Flutter的安装与环境配置

一、下载安装Futter&#xff1a; 1、Flutter中文文档&#xff1a; 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2、下载 Futter SDK&#xff1a; Flutter中文文档 里面有&#xff0c;下载完成之后找个文件夹解压出来&#xff0c;最好不要将 Flu…

asp.net core监听本地ip地址

开发asp.net core的时候遇到一个问题我想提供访问供其他同事测试&#xff0c;但是默认都是localhost或者127.0.0.1。我想换成我的Ip地址访问但是不行&#xff0c;百度搜索需要更换监听的地址即修改launchSettings.json&#xff0c;修改为0.0.0.0:5248&#xff0c;这样不管local…