BOOL DoRemoveDirectory(CString chrDirName);

 BOOL ReleaseDirectory(CString chrDirName)
{
BOOL bRemove = DoRemoveDirectory(chrDirName);
if (bRemove)
::RemoveDirectory(chrDirName);
else
return FALSE; return TRUE; } //end of CIVMSvrInfo::ReleaseDirectory() BOOL DoRemoveDirectory(CString chrDirName)
{
CString strDirName = chrDirName; BOOL result;
HANDLE Handle;
WIN32_FIND_DATA fData;
CString strTemp;
DWORD errorcode; Handle = FindFirstFile(strDirName + "\\*.*", &fData); if (Handle == INVALID_HANDLE_VALUE)
return FALSE; do {
errorcode = GetLastError(); if ( fData.cFileName[] == '.' )
continue; if (fData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) {
if (strDirName[strDirName.GetLength()-] != '\\'){
TCHAR chA[MAX_PATH];
CString strA = strDirName+'\\'+ fData.cFileName;
lstrcpy(chA, strA);
DoRemoveDirectory(chA);
}
else{
TCHAR chB[MAX_PATH];
CString strB = strDirName + fData.cFileName;
lstrcpy(chB, strB);
DoRemoveDirectory(chB);
} strTemp = strDirName + "\\" + fData.cFileName; SetFileAttributes(strTemp, ~FILE_ATTRIBUTE_READONLY);
if (!RemoveDirectory(strTemp))
result = FALSE;
else
result = TRUE;
}
else
{
strTemp = strDirName + "\\" + fData.cFileName;
BOOL bl = SetFileAttributes(strTemp, ~FILE_ATTRIBUTE_READONLY); if (!DeleteFile(strTemp))
result = FALSE;
else
result = TRUE;
} }while(FindNextFile(Handle,&fData)); errorcode = GetLastError(); if (errorcode == ERROR_NO_MORE_FILES)//空目录
{
::RemoveDirectory(strDirName);
result = TRUE;
} if (Handle)
FindClose(Handle); return result; } // end of BOOL PreRemoveDirectory(CString DirName)

在上述代码中

FindFirstFile第一个参数需要一个路径,但要写*.*,表示从所有文件中找到的第一个.但写f:或者f:双斜杠都返回无效句柄.

如果f:\\1.txt 则对特定文件进行搜索,返回找到的第一个

找到的文件的文件结构被记录在WIN32_FIND_DATA结构体里

FindNextFile第一个参数是FindFirstFile的返回值,可以接着上次结果继续寻找

但注意!!!!

但一个目录的文件被搜索一遍后,FindNextFile返回的WIN32_FIND_DATA结构体将重复找到最后一个找到的文件,而不会终止.

让循环结束的方法就是找上一次的报错码,然后看有没有ERROR_NO_MORE_FILES信息发生.

hFile的有效与否个人觉得还是取决于第一次的FindFirstFile结果,本程序后半段的运行主要还是errorcode!=ERROR_NO_MORE_FILES在控制.

VC++ 删除一个文件目录下的所有文件以及目录的更多相关文章

  1. HDFS的Java客户端操作代码(查看HDFS下所有的文件或目录)

    1.查看HDFS下所有的文件或目录 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.h ...

  2. python删除执行路径下的空文件夹

    def rm_emp_dir(path): """ 删除指定路径下的空文件夹 :param path: 指定路径 :type path: str :return: Non ...

  3. php--------删除一个路径下的所有文件夹和文件

    php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用. 也适合在thinkphp中清理缓存,在thinkphp中 ...

  4. VC 编程ANSI环境下读写Unicode文件

    没有注意到文件编码的不同会产生这么多的问题,在动手以前查询了很多资料,在本博客中收藏了不少先辈的成果,在这里一并表示致敬!       关于ANSI和Unicode编码的原理在这里也不说了,主要讲下如 ...

  5. Java 递归获取一个路径下的所有文件,文件夹名称

    package com.readfile; import java.io.File; public class GetAllFiles { public static void main(String ...

  6. 【spring boot logback】日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下/指定日志文件到达最大值后不按照配置进行切割

    原本的日志文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <configuration scan ...

  7. git 删除所有提交下的某个文件

    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch upload/*' --prune-empty - ...

  8. linux(2)文件和目录管理(新增,删除,复制,移动,文件和目录权限,文件查找)

    一.目录与路径 1.相对路径与绝对路径绝对路径:/开头, cd /usr相对路径:cd ../..2.目录操作(cd:change directory).:当前目录..:上一层目录-:上一个目录~:当 ...

  9. IDEA 工具下导出文件及文件的目录结构插件

    idea导出增量补丁插件 有时候需要导出IDEA的文件目录结构,即导出  指定修改后的JAVA文件编译后的CLASS .或者是修改过的jsp.配置文件等, 装载此插件,即可以完成导出文件  及文件的目 ...

随机推荐

  1. epub格式的电纸书

    epub格式是电纸书的一种标准,epub格式电纸书采用Zip压缩格式来来包裹书籍内容. 所以我们可以把epub格式的文件改成zip格式. 利用zip压缩工具解压文件. epub格式的文件阅读器 win ...

  2. spring boot继承web和mybatis时,调用接口删除记录出现的空指针以及解决办法

    前两天在学spring boot的时候,出现了一个很奇怪的错误,因为是第一次使用spring boot,所以没想到会遇到这种莫名其妙的bug,即调用接口删除数据库中一条记录的时候,数据库中记录事实上以 ...

  3. android指纹

    Android 6.0+指纹识别心得 Android 6.0+Fingerprint心得 数据来源:https://blog.csdn.net/lhj1076880929/article/detail ...

  4. android 6.0之后动态获取权限

    Android 6.0 动态权限申请   1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...

  5. iframs刷新的两种方法

    <iframe src="a1.html" id="iframe1Id" name="iframe1Name" width=" ...

  6. Python3学习之路~2.3 字符串操作

    字符串操作 特性:不可修改 name="my \tname is alex" print(name.capitalize()) #首字母变大写 print('Alex LI'.ca ...

  7. [py][mx]django静态文件目录配置

    使用TemplateView直接返回html from django.views.generic import TemplateView urlpatterns = [ path('',Templat ...

  8. Docker深入浅出3-容器管理

    docker客户端非常简单,我们可以直接输入docker命令来查看Docker客户端所有的命令项 [root@admin-fxr ~]# docker Usage: docker COMMAND A ...

  9. 如何提取app软件的apk格式中的字体?

    1.下载apk格式的指定app软件: 2.将apk格式的文件名更改为后缀名为zip格式: 3.用winrar解压软件解压,然后就找到其中的ttf格式的字体文件. 举例说明,我想找到airbnb的app ...

  10. C/S模型之TCP协议

    服务端: // WSASever.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <WinSock2.h> # ...