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. web移动端开发经验总结

    整理web移动端开发经验,部分内容借鉴于网上的博文. 1.meta标签 <meta name="viewport" content="width=device-wi ...

  2. ECharts修改坐标轴,坐标轴字体,坐标轴网格样式以及控制坐标轴是否显示

    转自:http://blog.csdn.net/kirinlau/article/details/72876689 首先要将一个图表显示在前端页面上: var myChart = echarts.in ...

  3. Linux 程序后台运行

    例子: shadowsocks 程序后台运行: sslocal -c /etc/shadowsocks-libev/config.json > /dev/>& & 参考: ...

  4. MySql关联子查询

    mysql有时候把子查询优化的很差,最差的情景就是 在where子句中使用in. -----<高性能mysql第二版>4.4.1

  5. 【linux echo -e命令】

    man帮助的解释是,允许后面的输出进行转义,假设你是 echo -e "i will use \n $HOME" 输出的将是i will use/root(当前用户的主目录)如果是 ...

  6. CentOS 7显卡驱动问题

    CentOS 7 KDE桌面安装后有时会出现nouveau 驱动问题,导致系统不定时死机或者重启,那么这时只能禁用nouveau 1. 在配置文件中禁用nouveauvi /etc/modprobe. ...

  7. Looper分析。ThreadLocal有关

    Class used to run a message loop for a thread. Threads by default do not have a message loop associa ...

  8. (3.5)mysql基础深入——mysqld_safe脚本功能及流程

    (3.5)mysql基础深入——mysqld_safe脚本功能及流程 目录 1.mysqld_safe过程总结 2.mysql_safe启动的好处 3.mysqld_safe 参数 4.mysqld_ ...

  9. dedecms如何增加自定义字段

    开源的cms比较好的一点是可以根据自己的需求来开发相应的功能,比如dedecms想要增加一个专家职称字段调用要怎么调用呢? 增加自定义字段:后台找到 “核心” - 频道模型 - 内容模型管理 - 字段 ...

  10. 001-window版redis安装

    一.参考地址 官方地址:https://redis.io/ windows版本[学习使用]:https://github.com/MicrosoftArchive/redis 二.windows版re ...