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

 #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. R语言-查找满足条件的数并获取索引

    1.在R语言中,怎样找到满足条件的数呢? 比如给定一个向量c2.要求找到数值大于0的数: > c2  [1] 0.00 0.00 0.00 0.00 0.00 0.00 0.06 0.09 0. ...

  2. SDK Build Tools revision (19.0.3) is too low for project Minimum required is 19.1.0

    假设你正在使用Android Studio工具进行开发,且将版本号更新到0.6.0的时候.莫名的出现这种错误 SDK Build Tools revision (19.0.3) is too low ...

  3. leetcode16 3-Sum

    题目链接 给定数组a[](长度不小于3)和一个数字target,要求从a中选取3个数字,让它们的和尽量接近target. 解法:首先对数组a进行排序,其次枚举最外面两层指针,对于第三个指针肯定是从右往 ...

  4. java socket输入输出中文乱码问题

    http://hi.baidu.com/linjk03/item/e2028bfd990c14ea1a111feb 统一了输入输出的编码格式,是不会有乱码问题出现的.   构造Reader或Write ...

  5. android通过USB使用真机调试程序

    我的机子很老,开启个android模拟器都要好几分钟,但幸亏有个android的真机,这样直接在andriod手机上调试也是一个不错的选择.下面我就介绍 一下使用android手机来调试android ...

  6. Python2 cmp() 函数

    描述 cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1. 语法 以下是 cmp() 方法的语法: cmp( ...

  7. Shiro整合SSH开发3:配置Shiro认证后页面地址跳转问题(和详述不配置须要注意的问题)

         在视频教程中讲请求认证成功后跳转页面的问题是一笔带过的,可是我认为有必要单独写一篇相应的文章进行叙述.      我用了SSH来整合Shiro,在开发后验证的过程中,每次登陆后Shiro都会 ...

  8. Android Hawk数据库 github开源项目

    Android Hawk数据库 github开源项目 Hawk 是一个很便捷的数据库  . 操作数据库仅仅需一行代码 , 能存不论什么数据类型 . github 地址: https://github. ...

  9. [sh]ls -F一种非常有用的ls格式

    ls -F一种非常有用的ls格式 tz/y/yupeng > ls -F#q#           News/         doc/          images/       mbox  ...

  10. JMeter学习笔记(五)-总结

    本周主要学习了JMeter如下几方面内容: (1)Bdboy录制方式: (2)JMeter的代理录制方式: (3)关联,在关联时我们要找到哪些内容是要关联的,这个主要通过分析哪些内容是由服务器返回的, ...