20_删除某个文件夹RemoveDirectory()

2023-11-10

删除某个文件夹RemoveDirectory()

思想是RemoveDirectory() 只能删除一个空的目录,如果目录中有子目录或者是子文件的话就会删除失败的。解决的方法是递归的思想,将子文件删除,之后就可以调用这个函数删除一个空的文件夹了。

//删除某个文件夹 如果这个文件夹下面有子目录或者文件,统统删除。
void EnumDeleteFile
(
	/*输入参数*/
	TCHAR* szDir
)
{
	WIN32_FIND_DATA findData;
	TCHAR szDir_[MAX_PATH];
	HANDLE hFind;

	CString szDirCstring(szDir);
	if (szDirCstring.ReverseFind('\\') == szDirCstring.GetLength() - 1) /* 最后一个字符是\ 则做删除处理*/
	{
		szDirCstring.Delete(szDirCstring.GetLength()-1,1);
		SecureZeroMemory(szDir_,sizeof szDir_);
		StringCchCopy(szDir_,MAX_PATH, szDirCstring.GetBuffer());
		StringCchCopy(szDir,MAX_PATH, szDirCstring.GetBuffer());
	}
	else
	{
		SecureZeroMemory(szDir_, sizeof szDir_);
		StringCchCopy(szDir_, MAX_PATH, szDir);
	}
	StringCchCat(szDir_,MAX_PATH,_T("\\*.*"));

	hFind = FindFirstFile(szDir_,&findData);

	if (INVALID_HANDLE_VALUE == hFind)
	{
		//此目录不存在!
		return;
	}

	do
	{
		TCHAR lpSzDirOrFile[MAX_PATH];

		if (!_tccmp(findData.cFileName, _T(".")) || !_tccmp(findData.cFileName, _T("..")))
			continue;

		if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			SecureZeroMemory(lpSzDirOrFile, sizeof lpSzDirOrFile);
			StringCchPrintf(lpSzDirOrFile, MAX_PATH, _T("%s\\%s"),szDir,findData.cFileName);
			EnumDeleteFile(lpSzDirOrFile);
		}
		else
		{
			SecureZeroMemory(lpSzDirOrFile, sizeof lpSzDirOrFile);
			StringCchPrintf(lpSzDirOrFile, MAX_PATH, _T("%s\\%s"), szDir, findData.cFileName);
			wcout << lpSzDirOrFile << endl;

			if (!DeleteFile(lpSzDirOrFile)) 
			{
				if (ERROR_ACCESS_DENIED == GetLastError()) //删除失败的原因,可能是文件是只读文件属性
				{
					 SetFileAttributes(lpSzDirOrFile, FILE_ATTRIBUTE_NORMAL);
					 DeleteFile(lpSzDirOrFile);
				}
			}
		}

	} while (FindNextFile(hFind,&findData));
	FindClose(hFind);


	RemoveDirectory(szDir); 
	
}

int _tmain(int argc,TCHAR* argv)
{

	/*TCHAR* target_dir = _T("D:\\copyDestDirectory");
	TCHAR ugii_root_dir[50] = {0};
	GetEnvironmentVariable(_T("UGII_ROOT_DIR"), ugii_root_dir,50); 
	

	CreateDirectory(_T("D:\\copyDestDirectory"), NULL);
	EnumCopyFile(ugii_root_dir, target_dir);*/
	

	EnumDeleteFile(_T("D:\\copyDestDirectory"));

	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

20_删除某个文件夹RemoveDirectory() 的相关文章

  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐