深度优先的遍历网上一大把,就是递归调用,这里就不说了,说点网上找不到的。

 #include <Windows.h>
#include <stdint.h>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue> typedef int8_t (__stdcall *P_WALKDIR_CALLBACK)(const char *In_pcFilePath); int8_t WalkDir(const char *In_pcRootDir, P_WALKDIR_CALLBACK In_pfunCallBack)
{
int8_t i8RetVal = ;
std::string strLocalRoot;
std::queue<std::string> qDirectory; if (In_pcRootDir == NULL || In_pfunCallBack == NULL)
{
i8RetVal = -;
goto fun_ret;
} strLocalRoot = In_pcRootDir;
if (strLocalRoot.empty())
{
i8RetVal = -;
goto fun_ret;
} char cRootBack = strLocalRoot.back();
if (cRootBack != '\\' && cRootBack != '/')
{
strLocalRoot += '\\';
}
qDirectory.push(strLocalRoot); do
{
std::string strDirForWalk = qDirectory.front();
WIN32_FIND_DATA Win32FindData = {};
HANDLE hFindHandle = NULL; qDirectory.pop();
hFindHandle = FindFirstFile((strDirForWalk + "*").c_str(), &Win32FindData);
if (hFindHandle == INVALID_HANDLE_VALUE)
{
continue;
}
if (strcmp(Win32FindData.cFileName, ".") != && strcmp(Win32FindData.cFileName, "..") != )
{
if (Win32FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
qDirectory.push(strDirForWalk + Win32FindData.cFileName + "\\");
}
else
{
In_pfunCallBack((strDirForWalk + Win32FindData.cFileName).c_str());
}
} while (FindNextFile(hFindHandle, &Win32FindData))
{
if (strcmp(Win32FindData.cFileName, ".") != && strcmp(Win32FindData.cFileName, "..") != )
{
if (Win32FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
qDirectory.push(strDirForWalk + Win32FindData.cFileName + "\\");
}
else
{
In_pfunCallBack((strDirForWalk + Win32FindData.cFileName).c_str());
}
}
} if (hFindHandle != NULL)
{
FindClose(hFindHandle);
}
} while (!qDirectory.empty()); fun_ret:
return i8RetVal;
} int8_t __stdcall WalkDirCallBack(const char *In_pcFilePath)
{
if (In_pcFilePath != NULL)
{
printf("%s\n", In_pcFilePath);
}
return ;
} void main(int argc, char **argv)
{
WalkDir(argv[], WalkDirCallBack);
return;
}

PS:

用Python测试遍历结果正确性,发现Python是深度优先的遍历,呵呵。

广度优先遍历目录(Windows平台、C++)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. Windows平台将远程服务器的目录挂载为本地磁盘

    我们在设置数据库自动备份时,为了数据的安全往往需要直接将数据备份到远程服务器上.在Linux可以通过NFS挂载来实现,在Windows平台可以直接通过net use+subst来实现将远程服务器的目录 ...

  8. Windows平台分布式架构实践 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  9. 在Github上搭建自己的博客(Windows平台)

    折腾了好久,终于在Github上搭建了自己的博客.这里面总结一下过程希望对大家能有所帮助. Github建博优缺点 和 csdn,新浪,网易相比,在Github上可以自己实现功能 和阿里云,VPS相比 ...

随机推荐

  1. iOS-各种动画特效

    概述 广播跑马灯/弹幕/直播点赞/烟花/雪花等动画特效, 后续增加~ 详细 代码下载:http://www.demodashi.com/demo/10674.html 一.实现功能 1. 广播跑马灯 ...

  2. linux 文件操作库函数

    fopen :打开文件 fread :读文件 fwrite : 写文件 fgetc : 读字符 fputc : 写字符 fscanf : 格式化读 fprintf : 格式化写 fseek : 文件偏 ...

  3. extends android.view.ViewGroup两种实现

    /*    private int measureHeight(int heightMeasureSpec) {         int count = getChildCount();        ...

  4. AbatorForEclipse插件使用总结

    AbatorForEclipse是IbatorForEclipse之前的一个老版插件.插件装好后,我们来使用看看:1,新建一个工程AbatorTest,点击右键,新建一个abatorConfig.xm ...

  5. HDUOJ----(1016)Prime Ring Problem

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. Mac下搭建svn服务器和XCode配置svn

    先打开命令行终端. 1.创建svn repository svnadmin create /yourpath/svnroot/repository 2.配置svn用户权限. / yourpath /s ...

  7. PLSQL_统计信息系列04_统计信息的锁定和删除

    20150506 Created By BaoXinjian

  8. android 布局权重问题(最近布局经常坑爹)

    android 布局 权重 With layout_weight you can specify a size ratio between multiple views. E.g. you have ...

  9. Linux内存初始化(四) 创建系统内存地址映射

    一.前言 经过内存初始化代码分析(一)和内存初始化代码分析(二)的过渡,我们终于来到了内存初始化的核心部分:paging_init.当然本文不能全部解析完该函数(那需要的篇幅太长了),我们只关注创建系 ...

  10. 在Debug模式下中断, 在Release模式下跳出当前函数的断言

    在Debug模式下中断, 在Release模式下跳出当前函数的断言 #ifdef DEBUG #define __breakPoint_on_debug asm("int3") # ...