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() 的相关文章

  • 如何编写 Maven 构建脚本来执行 Java

    如何在构建过程中或构建刚刚完成后执行 Java 程序 可以直接从 pom 中执行此操作吗 mvn exec java Dexec mainClass org sonatype mavenbook weather Main EDIT 假设我想
  • Java - 将无符号十六进制字符串解析为有符号长整型

    我有一堆十六进制字符串 其中之一是 d1bc4f7154ac9edb 这是 3333702275990511909 的十六进制值 如果执行 Long toHexString d1bc4f7154ac9edb 这与您得到的十六进制相同 现在
  • 在java代码中创建postgresql表

    我有一个与 postgreSQL 数据库连接的 java 代码 现在 我希望当它连接到数据库时 我还将创建数据库表 但我的问题是 它不会创建数据库 我不知道问题是什么 这是我的代码 Statement st null ResultSet r
  • 如何杀死 Java Future?

    我正在开发的服务使用 Future 来并行运行多个任务 每个任务最多可能需要一分钟才能完成 然而 外部库似乎有问题 因为在某些情况下 2 的时间 它不会返回 在这些情况下 我想给出 2 分钟的等待时间 如果还没有返回 我想杀死 future
  • Java:一种将 Mime(内容)类型与 CommonsMultipartFile 中的文件扩展名相匹配的方法

    在我的公司 出于额外原因 我需要将 mime 类型与文件扩展名进行比较 我有一个CommonsMultipartFile 我正在尝试找出进行这种比较的最佳方法 我见过一个MimetypesFileTypeMap 但不确定这是否适用于此 我试
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • 如何使用 aether 从 Java 找到最新版本的 Maven 工件?

    他们的文档非常薄弱 我无法弄清楚 我找到了部分答案here https stackoverflow com questions 27428068 how to retrieve the latest also snapshot versio
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • java绕中心旋转矩形

    我想围绕其中心点旋转一个矩形 它应该保留在应该绘制的位置并在该空间中旋转 这是我的代码 AffineTransform transform new AffineTransform transform rotate Math toRadian
  • 如何在 JmsMessagingTemplate.sendAndReceive 上设置等待超时

    我在 MVC 控制器中使用 JmsMessagingTemplate 的 sendAndReceive 但如果没有发送回复消息 它似乎会永远等待回复 该文档指出 返回 回复 如果无法接收消息 例如由于超时 则可能为 null 然而 我只是不
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • 在 Spring MVC 中将请求写入文件

    我希望能够将整个请求写入 Spring MVC 控制器中的文件 我已尝试以下操作 但即使我使用大量参数发出 POST 请求 文件也始终为空 RequestMapping method RequestMethod POST value pay
  • junit4 使用特定测试方法创建测试套件

    在 junit4 中 我想执行来自不同类的特定测试方法 即想要使用来自不同类的特定测试方法创建一个测试套件 假设我有两门课 public class Test Login Test public void test Login 001 Sy
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所

随机推荐