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

 #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. 【laravel5.4】 Composer移除依赖

    1.在一次使用composer安装依赖的时候,安装错了包,在其中文网站却找不到移除依赖的命令,只好使用按照官网说法: 为了从命令行获得帮助信息,请运行 composer 或者 composer lis ...

  2. navicat for mysql怎么注册?navicat11全系列破解教程(附注册码)

    来自脚本之家 http://www.jb51.net/softjc/473494.html

  3. [转]MegCup2015初赛题

    原文链接 门票题:数独有多少种对解线上没有1的填法? 这道"门票题"虽说只是"热身",但还是有一定难度的.共有245名选手通过各种方法拿到了门票.下面,我们就为 ...

  4. 【jQuery】form表单元素序列化为json对象

    序列化form表单元素为json对象: <!Doctype html> <html xmlns=http://www.w3.org/1999/xhtml> <head&g ...

  5. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件

    通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二).   前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...

  6. 在QML应用中实现threading多任务

    在这个样例中,我们将介绍怎样在QML应用中使用QML语言提供的threading功能,实现多任务. 很多其它的阅读在:http://doc.qt.io/qt-5/qtquick-threading-e ...

  7. python-循环与判断练习题

    一.设计这样一个函数,在指定的文件夹上创建10个文本,以数字给它们命名. def text_creation(): path ='D:/study/python3/w/' for name in ra ...

  8. Python isalpha() 方法

    描述 Python isalpha() 方法检测字符串是否只由字母或汉字组成. 语法 isalpha() 方法语法: S.isalpha() 参数 无. 返回值 如果字符串至少有一个字符并且所有字符都 ...

  9. 查看mysql日志

    1.首先确认你日志是否启用了 MySQL>show variables like 'log_bin'; 2.如果启用了,即ON那日志文件就在MySQL的安装目录的data目录下 3.怎样知道当前 ...

  10. mysql 权限处理

    这是对mysql 业务用户在权限处理中遇到的坑: 之前在新建mysql 实例后会做两件事 1.增加业务库 2.为业务库增加一个与之对应的用户 create database appdb char se ...