方式一:

DWORD z_dRed = 0;
char z_FilePath[MAX_PATH] = {0};
char z_newPath[MAX_PATH] = {0};
char z_tmpPath[MAX_PATH] = {0};
char *z_dir = NULL;
WIN32_FIND_DATA wfd;
ZeroMemory(&wfd, sizeof(wfd));

sprintf_s(z_FilePath,512, "%s\\*.*",folderPath);
HANDLE hFind = FindFirstFile(z_FilePath, &wfd);
if (hFind == INVALID_HANDLE_VALUE)
{
return FALSE;
}

do
{
char* strFileName = wfd.cFileName;

if (0 == strcmp(strFileName, ".") || 0 == strcmp(strFileName, "..") )
{
continue;
}

#ifdef _WIN32
sprintf(z_newPath, "%s%s%s", folderPath, "\\", strFileName);
#else
sprintf(z_newPath, "%s%s%s", folderPath, "/", strFileName);
#endif

if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
{
z_dRed = AddDirToZip(zf, z_newPath);
}
else
{
char z_savepath[MAX_PATH] = {0};
sprintf(z_tmpPath, "%s", z_newPath);
PathRemoveFileSpec(z_tmpPath);

if (g_dirCount > strlen(z_tmpPath))
{
printf("error zip file: %s\n", z_newPath);
continue;
}

z_dir = &(z_tmpPath[g_dirCount]);

z_dRed = AddFileToZip1(zf, z_newPath, z_dir);
}

} while (FindNextFile(hFind, &wfd));

return z_dRed;

方式二:

DWORD CFolderDelete::TransferFolder_T( IN WCHAR * folderPath, IN FILEOPERFUNC func , IN WCHAR * fileNameFltDoNothing, IN WCHAR separator )
{
LOG(L"7777777777777777777777 TransFolder In %s 7777777777777777777777。\n", folderPath);
USES_CONVERSION;
int z_Ret = ERROR_TASKOP_OK;
CFileFind z_FileFind;
WCHAR z_FilePath[512] = {0};
WCHAR z_TarPath[MAX_PATH]={0};
bool z_SomeFileDeleteFailed = false;

if (_tcslen(folderPath)<4)
{
return ERROR_TASKOP_OTHER;
}

DWORD z_Flag = GetFileAttributes(folderPath);

if (z_Flag==(UINT)-1||!(z_Flag&FILE_ATTRIBUTE_DIRECTORY))
{
return ERROR_TASKOP_OTHER;
}

swprintf_s(z_FilePath,512, L"%s\\*.*",folderPath);

BOOL z_IsFinded = z_FileFind.FindFile(z_FilePath);
while (z_IsFinded)
{
z_IsFinded = z_FileFind.FindNextFile();

if (!z_FileFind.IsDots())
{
WCHAR z_TempDir[512]={0};
swprintf_s(z_TempDir,512, L"%s\\%s", folderPath, z_FileFind.GetFileName());

if (fileNameFltDoNothing != NULL && separator != NULL)
{
if (IsElemInSet(z_FileFind.GetFileName().GetBuffer(), fileNameFltDoNothing, separator))
{
LOG(L"7777777777777777777777 %s 不再遍历7777777777777777777777。\n", z_TempDir);
continue;
}
}

if (z_FileFind.IsDirectory())
{
z_Ret = TransferFolder_T(z_TempDir, func, fileNameFltDoNothing, separator);
}
else
{
if (func!=NULL)
{
LOG(L"7777777777777777777777 %s 删除 !!7777777777777777777777。\n", z_TempDir);
func(z_TempDir);
}
}
}

}

z_FileFind.Close();

if(!RemoveDirectory(folderPath))
{
LOG(L"##########XXY########## 删除目录 %s 失败。##########XXY########## \n", folderPath);
z_Ret = ERROR_TASKOP_OTHER;
}

LOG(L"7777777777777777777777 TransFolder Out %s 7777777777777777777777。\n", folderPath);

return z_Ret;
}

【windows c】 遍历目录的更多相关文章

  1. 在Linux下和Windows下遍历目录的方法及如何达成一致性操作

    最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件 ...

  2. Linux和Windows的遍历目录下所有文件的方法对比

    首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...

  3. C/C++遍历目录下的所有文件(Windows篇,超详细)

    注: 1. 本文讨论的是怎么用Windows API遍历目录下的所有文件.除Windows API,还有一种Windows/Linux通用的方式,使用<io.h>. 2. 本文部分翻译自M ...

  4. lua在linxu和windows系统下的遍历目录的方法

    在windows下遍历目录使用lfs库:例如遍历整个目录下的所有文件 local lfs = require "lfs" function findPathName(path)  ...

  5. C++遍历目录,并把目录里超过7天的文件删除(跨平台windows&linux)

    C++遍历目录,并把目录里超过7天的文件删除,适用于项目里删除过期的日志,或者视频文件. 在windows和linux下测试通过. windows测试结果: linux测试结果: 源码: #inclu ...

  6. C/C++遍历目录下的所有文件(Windows/Linux篇,超详细)

    本文可转载,转载请注明出处:http://www.cnblogs.com/collectionne/p/6815924.html. 前面的一篇文章我们讲了用Windows API遍历一个目录下的所有文 ...

  7. windows 遍历目录下的所有文件 FindFirstFile FindNextFile

    Windows下遍历文件时用到的就是FindFirstFile 和FindNextFile 首先看一下定义: HANDLE FindFirstFile( LPCTSTR lpFileName, // ...

  8. 【app】遍历目录所有文件

    遍历目录所有文件   原创,转载时请注明,谢谢.邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...

  9. Linux 遍历目录下面所有文件,将目录名、文件名转为小写

    当你从 Windows 服务器换到 Linux 服务器的时候,以前的上传目录的目录名.文件名会遇到大小写的问题.在 Windows 环境下面没有文件区分大小写的概念,而 Linux 却有严格的文件名大 ...

  10. [python小记]使用lxml修改xml文件,并遍历目录

    这次的目的是遍历目录,把目标文件及相应的目录信息更新到xml文件中.在经过痛苦的摸索之后,从python自带的ElementTree投奔向了lxml.而弃用自带的ElementTree的原因就是,na ...

随机推荐

  1. Vue axios 上传图片

    上传图片接口 // 上传图片 export const uploadBanner = formData => { return axios.request({ url: 'manage/slid ...

  2. lua-nginx-module模块常用命令

    ngx.location.capture 用法: local res = ngx.location.capture(uri, options) 发起一个同步非阻塞的nginx子请求,uri是inter ...

  3. elastic 常用操作

    前缀搜索

  4. python+unittest+requests实现接口自动化

    前言: Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2  ...

  5. 已有插件支持requirejs

    define(["jquery"], // Require jquery        function($){ //把你原来的插件代码放这里吧,这样就行了 //注意文件命名 }) ...

  6. Android规划周期任务

    问题:应用总要周期性的执行某项任务,例如检查服务器上的更新或者提醒用户做某些事情. 解决方案:用AlarmManager来管理和执行任务.AlarmManager可用于计划未来的单次或重复操作,甚至在 ...

  7. java 实现一套流程管理、流转的思路(伪工作流)

    在做某个管理项目时,被要求实现一套流程管理,比如请假的申请审批流程等,在参考了很多资料,并和同事讨论后,得到了一个自主实现的流程管理. 以下提供我的设计思路,知道了思路,实现起来就简单很多了. 首先我 ...

  8. 前端emmet插件的一些常用用法

    以下是在webstorm中简单使用emmet插件,注意一点就是当编写完emmet命令后一定要把光标移动到命令的结尾处,不然生成的代码会不一样 <!DOCTYPE html> <htm ...

  9. oracle系统包——dbms_alert用法

    oracle内部提供的在数据库内部和应用程序间通信的方式有以下几种:1.警报,就是DBMS_ALERT包提供的功能:2.管道,由DBMS_PIPE提供:3.高级队列,这个就很复杂,当然提供的功能也是很 ...

  10. 4、在Shell程序中的使用变量

    学习目标变量的赋值变量的访问变量的输入 12-4-1 变量的赋值在Shell编程中,所有的变量名都由字符串组成,并且不需要对变量进行声明.要赋值给一个变量,其格式如下:变量名=值.注意:等号(=)前后 ...