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

 #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. 【LeetCode】22. Generate Parentheses (2 solutions)

    Generate Parentheses Given n pairs of parentheses, write a function to generate all combinations of ...

  2. Linux命令-安全复制命令:scp

    scp是有Security的文件copy,基于ssh登录.操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上. 命令格式: scp [可选参数] 源文件 目标文件 scp 本地文件 远 ...

  3. OGG_GoldenGate检查点应用Checkpoint(案例)

    2014-03-06 Created By BaoXinjian

  4. Concurrency Managed Workqueue(四)workqueue如何处理work

    一.前言 本文主要讲述下面两部分的内容: 1.将work挂入workqueue的处理过程 2.如何处理挂入workqueue的work 二.用户将一个work挂入workqueue 1.queue_w ...

  5. C#--索引

    索引是一组get和set访问器,类似于属性的访问器. 索引和属性在很多方面是相似的. 和属性一样,索引不用分配内存来存储: 索引和属性都主要被用来访问其他数据成员,这些成员和他们关联,他们为这些成员提 ...

  6. spring sessionFactory 属性配置详解,applicationContext中各种属性详解

    1.Bean的id为sessionFactory,对应的类为AnnotationSessionFactory,即采用注解的形式实现hibernate. 2.hibernateProperties,配置 ...

  7. spring mvc get方式乱码

    使用spring get方式,向后台传递参数的时候,出现乱码,网上搜索了好久,最后发现原因是server.xml中默认的配置有问题,修改如下就正确了,图片: 文本信息:     <Connect ...

  8. Apply Bug10010310 On Oracle RAC 10.2.0.5

    9月24日数据库上频繁出现例如以下错误 Errors in file /u04/admin/njord/udump/njord_ora_25895.trc: ORA-27300: OS system ...

  9. Android 开发之 bindService() 通信

    Service 启动方式有两种 startService(intent) bindService(intent,conn,Context.BIND_AUTO_CREATE) startService( ...

  10. UVA - 11609 Teams (排列组合数公式)

    In a galaxy far far awaythere is an ancient game played among the planets. The specialty of the game ...