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. Spark Streaming 在数据平台日志解析功能的应用

    https://mp.weixin.qq.com/s/bGXhC9hvDj4lzK7wYYHGDg 目前,我们使用Filebeat监控日志产生的目录,收集产生的日志,打到logstash集群,接入ka ...

  2. vue中给请求到的数据对象加属性问题

    今天发现了个很奇怪的问题,我在做一个:点击列表  使点中的列表项变色的功能,而且是多个大列表项,在每个大列表项里点击切换列表项的时候不影响其他大列表项的选项. 解决思路,因为这些大列表项是请求到的数据 ...

  3. vue中引入awesomeswiper的方法以及编写轮播组件

    1.先安装less-loader npm install less less-loader --save 2.再安装css-loader npm install css-loader --save 3 ...

  4. 第一课 JDK环境变量配置

    第一步:下载,并解压到D:/JDK 第二步:环境变量配置 右键我的电脑->属性->高级->环境变量->系统变量(注意:是下面的系统变量,不是上面的用户变量) 新建变量名 JAV ...

  5. URAL 1517 Freedom of Choice (后缀数组 输出两个串最长公共子串)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/whyorwhnt/article/details/34075603 题意:给出两个串的长度(一样长) ...

  6. docker学习(3)--Dockfile详解

    转载请注明出处:http://www.cnblogs.com/lighten/p/6900556.html 1.基本说明 Dockfile是一个用于编写docker镜像生成过程的文件,其有特定的语法. ...

  7. docker的安装,使用

    1:安装:https://blog.csdn.net/yx_222/article/details/80936757 sudo apt-get install docker.io 2:  使用dock ...

  8. 使用pssh进行并行批量操作

    假如同时给上千台服务器执行一个命令,拷贝一个文件,杀一个进程等,有什么简化运维管理的工具呢?在小型使用中我都是使用for循 环,数量巨大,一方面不确定操作是否成功,一方面for循环语句性能不好估计且是 ...

  9. B*树的定义

    B*树是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针: B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+树的1/2). 所以,B*树分配新结点的 ...

  10. jmeter Bean Shell的使用(一)

    未经作者允许,禁止转载!!! Jmeter有哪些Bean Shell 定时器: BeanShell Timer 前置处理器:BeanShell PreProcessor 采样器: BeanShell ...