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

 #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是深度优先的遍历,呵呵。

最新文章

  1. jquery toggle方法使用出错?请看这里-遁地龙卷风
  2. Spring配置文件详解 - applicationContext.xml文件路径
  3. plsql+绿色版oracle连接远程数据库配置及提示缺少msvcr71.dll解决方法
  4. pip高级使用技巧以及搭建自己的pypi服务器
  5. Oracle之自动收集统计信息
  6. UVa11732 &quot;strcmp()&quot; Anyone?(Trie树+孩子兄弟表示法)
  7. Thinking In Java 读书笔记
  8. JavaScript使用技巧
  9. Nginx详解以及LNMP的搭建
  10. C#语言中的修饰符
  11. 性能瓶颈之System
  12. Linux下maven安装
  13. hdu 1864 最大报销额 01背包
  14. [学习笔记]CDQ分治和整体二分
  15. 修改MyEclipse取消默认工作空间
  16. Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2) D. Something with XOR Queries
  17. OpenGL学习笔记(4) GLM库的使用
  18. java内存结构JVM——java内存模型JMM——java对象模型JOM
  19. KnockoutJS Select 标签 Options绑定
  20. Java xml 操作(Dom4J修改xml &#160;&#160;+ xPath技术 &#160;+ SAX解析 + XML约束)

热门文章

  1. Android利用温度传感器实现带动画效果的电子温度计
  2. PHP-PHP核心技术与最佳实践阅读
  3. 【LeetCode】135. Candy
  4. WordPress网站搬家的问题
  5. C#代码规范 程序员必备的秘笈
  6. webDAV服务的开启以及客户端的上传、下载、删除、新建文件夾、列表的代码(C#)
  7. Oschina 安卓client源代码学习之中的一个
  8. STL应用之set
  9. C++ main函数命令行参数使用
  10. win7上安装theano keras深度学习框架