Windows C++ 非递归式(stack)深度优先遍历目录
#include <Windows.h>
#include <cstdio>
#include <cstring>
#include <string>
#include <stack> typedef void (__stdcall *P_WALK_DIR_CALLBACK)(const std::string &In_strFilePath); int WalkDir(const char *In_pcRoot, P_WALK_DIR_CALLBACK In_pfunCallBack)
{
int iRetVal = ;
std::string strRoot;
std::stack<std::string> stkDirs; if (In_pcRoot == NULL || In_pfunCallBack == NULL)
{
iRetVal = -;
goto fun_ret;
} strRoot = In_pcRoot;
if (strRoot.empty())
{
iRetVal = -;
goto fun_ret;
} if (strRoot.back() != '\\' && strRoot.back() != '/')
strRoot += '\\';
stkDirs.push(strRoot); while (!stkDirs.empty())
{
std::string strDirForWalk;
WIN32_FIND_DATAA Win32FindData = {};
HANDLE hFindHandle = NULL; strDirForWalk = stkDirs.top();
stkDirs.pop();
hFindHandle = FindFirstFileA((strDirForWalk + "*").c_str(), &Win32FindData);
if (hFindHandle == INVALID_HANDLE_VALUE)
continue; if (!(strlen(Win32FindData.cFileName) == && strncmp(Win32FindData.cFileName, ".", ) == )
&& !(strlen(Win32FindData.cFileName) == && strncmp(Win32FindData.cFileName, "..", ) == ))
{
if (Win32FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
stkDirs.push(strDirForWalk + Win32FindData.cFileName + "\\");
else
In_pfunCallBack(strDirForWalk + Win32FindData.cFileName);
}
while (FindNextFileA(hFindHandle, &Win32FindData))
{
if (!(strlen(Win32FindData.cFileName) == && strncmp(Win32FindData.cFileName, ".", ) == )
&& !(strlen(Win32FindData.cFileName) == && strncmp(Win32FindData.cFileName, "..", ) == ))
{
if (Win32FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
stkDirs.push(strDirForWalk + Win32FindData.cFileName + "\\");
else
In_pfunCallBack(strDirForWalk + Win32FindData.cFileName);
}
} if (hFindHandle != INVALID_HANDLE_VALUE)
FindClose(hFindHandle);
} fun_ret:
return iRetVal;
} void inline __stdcall WalkDirCallBack(const std::string &In_strFilePath)
{
printf("%s\n", In_strFilePath.c_str());
return;
} void main(int argc, char **argv)
{
WalkDir(argv[], WalkDirCallBack);
return;
}
Windows C++ 非递归式(stack)深度优先遍历目录的更多相关文章
- 非递归实现先序遍历 java leecode 提交
写完才知道自己学习都是似是而非啊,大家可以也在leecode上提交代码,纯手写,离开eclipse第一种方式:数据结构书上的,使用栈大概思路.1.不断将根节点的左孩子的左孩子直到为空,在这个过程入栈. ...
- 数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)
前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...
- 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)
参考网址:图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) - 51CTO.COM 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath ...
- 基于visual Studio2013解决面试题之0401非递归遍历二叉树
题目
- 二叉树3种递归和非递归遍历(Java)
import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...
- Java实现二叉树的先序、中序、后序、层序遍历(递归和非递归)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...
- 非递归遍历二叉树Java版的实现代码(没写层次遍历)
直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...
- C++编程练习(17)----“二叉树非递归遍历的实现“
二叉树的非递归遍历 最近看书上说道要掌握二叉树遍历的6种编写方式,之前只用递归方式编写过,这次就用非递归方式编写试一试. C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历 ...
- Java ---- 遍历链表(递归与非递归实现)
package test; //前序遍历的递归实现与非递归实现 import java.util.Stack; public class Test { public static void main( ...
随机推荐
- java中写sql语句的小小细节
来源于:http://www.cnblogs.com/reine98/p/6180472.html 看如下一条sql语句 1 2 3 4 5 6 String sql="SELECT * F ...
- php计算经纬度间的距离
<?php //根据经纬度计算距离 function getdistance($lng1,$lat1,$lng2,$lat2) { //将角度转为狐度 $radLat1=deg2rad($lat ...
- 关于ftpshell脚本中mget中去除多余交互式提示的方法
默认情况下ftp里面的交互式提示是开启的,平常如果下载多个文件时,这种提示很让人烦,如果是在shell脚本里面要从ftp服务器上一次mget多个文件,写个交互式很麻烦,最好是把这个交互式提示关掉. 进 ...
- Linux GPIO子系统
一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0-MAX_INT之间的整数 ...
- 转 Python标准库01 正则表达式 (re包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我将从正则表达式开始讲Python的标准库.正则表达式是文字处理中常用的工具,而且 ...
- AP_自动付款工作台设定和操作(流程)
2014-06-04 Created By BaoXinjian
- Unix环境高级编程(四)数据系统文件和信息
本章主要介绍了Unix系统的正常运行要使用的与系统有关的数据文件和信息.如:口令文件,阴影文件.组文件.附加组.系统标识.时间和日期历程. 口令文件,即Unix系统用户数据库,存储在/etc/pass ...
- NRF24L01
转http://blog.csdn.net/wangshenzhen123/article/details/47207837 1.一个发送通道,6个接收通道.发送端发送通道地址寄存器中的地址指向的就是 ...
- html中一些常用标签及属性
html中标签分为块级标签和行级标签 块级标签常用的有 <div> <p> <h1><hr><pre><table><ul ...
- Smarty之html_options使用心得
<select name="group_id">{html_options options=$member_group selected=$member.group_i ...