#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;
}

最新文章

  1. win10 安装framework3.5
  2. Android Studio 常用快捷键
  3. Jmeter使用入门
  4. 赴美工作常识(Part 2 - 申请)
  5. Python进程、线程
  6. 已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。
  7. 000 VS2013 c++ 框架
  8. HDU 2473 Junk-Mail Filter(并查集+删点,设立虚父节点/找个代理)
  9. 日志管理 rsyslog服务浅析
  10. python 重载 __hash__ __eq__
  11. 深入浅出 ThreadLocal(一)
  12. [CSS3] 学习笔记-CSS入门基本知识
  13. 数据结构 Python实现
  14. oralce执行计划
  15. Python笔记 【无序】 【一】
  16. Red-Gate.NET.Reflector.v8.0.1.308(内含注册机Keygen与注册图解)
  17. hdu5178 pairs
  18. CentOS使用vsftpd开启FTP服务以及配置用户
  19. Java API方式调用Kafka各种协议
  20. linux安装scala环境

热门文章

  1. 【微信小程序】 引用公共js里的方法
  2. TP3.2校验微信公众号||小程序 服务器地址
  3. MySQL-五种日志(查询日志、慢查询日志、更新日志、二进制日志、错误日志)、备份及主从复制配置
  4. HDUOJ------1711Number Sequence
  5. 验证码在后台的编写,并实现点击验证码图片时时发生更新 C# 项目发布到IIS后不能用log4net写日志
  6. JMeter学习-内存溢出解决方法
  7. RHEL7 -- 通过gerp使用正则表达式
  8. AspxPivotGrid和WebChartControl数据联动处理日志
  9. Python ljust() 方法
  10. elk中文教程