【windows c】 遍历目录
方式一:
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】 遍历目录的更多相关文章
- 在Linux下和Windows下遍历目录的方法及如何达成一致性操作
最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件 ...
- Linux和Windows的遍历目录下所有文件的方法对比
首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...
- C/C++遍历目录下的所有文件(Windows篇,超详细)
注: 1. 本文讨论的是怎么用Windows API遍历目录下的所有文件.除Windows API,还有一种Windows/Linux通用的方式,使用<io.h>. 2. 本文部分翻译自M ...
- lua在linxu和windows系统下的遍历目录的方法
在windows下遍历目录使用lfs库:例如遍历整个目录下的所有文件 local lfs = require "lfs" function findPathName(path) ...
- C++遍历目录,并把目录里超过7天的文件删除(跨平台windows&linux)
C++遍历目录,并把目录里超过7天的文件删除,适用于项目里删除过期的日志,或者视频文件. 在windows和linux下测试通过. windows测试结果: linux测试结果: 源码: #inclu ...
- C/C++遍历目录下的所有文件(Windows/Linux篇,超详细)
本文可转载,转载请注明出处:http://www.cnblogs.com/collectionne/p/6815924.html. 前面的一篇文章我们讲了用Windows API遍历一个目录下的所有文 ...
- windows 遍历目录下的所有文件 FindFirstFile FindNextFile
Windows下遍历文件时用到的就是FindFirstFile 和FindNextFile 首先看一下定义: HANDLE FindFirstFile( LPCTSTR lpFileName, // ...
- 【app】遍历目录所有文件
遍历目录所有文件 原创,转载时请注明,谢谢.邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...
- Linux 遍历目录下面所有文件,将目录名、文件名转为小写
当你从 Windows 服务器换到 Linux 服务器的时候,以前的上传目录的目录名.文件名会遇到大小写的问题.在 Windows 环境下面没有文件区分大小写的概念,而 Linux 却有严格的文件名大 ...
- [python小记]使用lxml修改xml文件,并遍历目录
这次的目的是遍历目录,把目标文件及相应的目录信息更新到xml文件中.在经过痛苦的摸索之后,从python自带的ElementTree投奔向了lxml.而弃用自带的ElementTree的原因就是,na ...
随机推荐
- Opencv ValueError: not enough values to unpack (expected 3, got 2)解决办法
问题背景 有些人在用我去年的毕设运行时(感谢QAQ),报错 Opencv ValueError: not enough values to unpack (expected 3, got 2) 当时就 ...
- Effective C++ 改善55个方法
美·Scott Meyers 候捷 电子工业 2011 刚才看到个会议时间有点晚,3.25论文都提交了 谷歌去广告的插件, 最后投了这个会议,刚刚好正合适.我说金钱与时间 ACCUSTOMING YO ...
- hdu1495 bfs搜索、模拟
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...
- shell map使用
# 定义初始化map declare -A map=([") # 输出所有key echo ${map[@]} # 输出key对应的值 "]} # 遍历map for key in ...
- $bzoj1025-SCOI2009$游戏 群论 $dp$
题面描述 \(windy\)学会了一种游戏.对于\(1\)到\(N\)这\(N\)个数字,都有唯一且不同的1到N的数字与之对应.最开始\(windy\)把数字按顺序\(1,2,3,\cdot ...
- oracle 中的exists 和 in 效率问题
oracle中的 exists 和 in 的效率问题 --------------------------------------------------------------- +++++++++ ...
- IIS进程池异常崩溃,导致网站 service unavailable,原因排查与记录。
昨晚十点钟的样子,网站崩溃,开始 service unavailable,最近开始业务高峰,心里一惊,麻痹肯定进程池又异常崩溃了.又碰到什么问题?上次是因为一个异步线程的问题,导致了进程池直接崩溃,后 ...
- (转)linux内存源码分析 - 内存回收(lru链表)
原文:http://www.cnblogs.com/tolimit/p/5447448.html 概述 对于整个内存回收来说,lru链表是关键中的关键,实际上整个内存回收,做的事情就是处理lru链表的 ...
- oracle10g获取Date类型字段无时分秒解决办法!
一般的数据库中,DATE字段仅仅表示日期,不包括日期信息,而Oracle数据库中的DATE数据类型是包括日期.时间的,对于不同的Oracle jdbc驱动版本,对于该问题的处理都有些区别. 最近使用 ...
- jedis入门教程
1 jedis介绍 2 java连接Redis 1 导入jar包 2 连接实例 @Test //获得单一的jedis对象操作数据库 public void test1(){ //1.获得连接对象 设置 ...