C++Windows下递归遍历多级目录
2015-10-19 17:15
447 查看
#include <tchar.h> #include <Windows.h> #include <Shlwapi.h> #pragma comment( lib, "Shlwapi.lib" ) #include <strsafe.h> bool ForeachFileByDirectory( LPCTSTR pDirectory ) { if( NULL == pDirectory ) { return false; } //不存在的路径 if( FALSE == PathFileExists( pDirectory ) ) { return false; } //遍历所有类型文件 WIN32_FIND_DATA FindData; TCHAR Directory[ MAX_PATH ]; StringCbPrintf( Directory, sizeof( Directory ), TEXT( "%s\\*.*" ), pDirectory ); //找到当前目录第一个句柄 HANDLE hFile = FindFirstFile( Directory, &FindData ); if( INVALID_HANDLE_VALUE == hFile ) { return false; } TCHAR FullDirectory[ MAX_PATH ]; do { //过滤打开文件夹符号 if( TEXT( '.' ) == FindData.cFileName[ 0 ] ) { continue; } //得到当前遍历的完整路径 StringCbPrintf( FullDirectory, sizeof( FullDirectory ), TEXT( "%s\\%s" ), pDirectory, FindData.cFileName ); //找到一个文件 if( 0 == ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ) { _tprintf( TEXT( "find file: %s size:%d bytes.\n" ), FullDirectory, FindData.nFileSizeLow ); } //否则找到一个文件夹 else { _tprintf( TEXT( "find directory: %s.\n" ), FullDirectory ); //继续递归这个文件夹 if( false == ForeachFileByDirectory( FullDirectory ) ) { return false; } } } while( FALSE != FindNextFile( hFile, &FindData ) ); //检查退出循环条件是否是没有文件了否则出错 if( ERROR_NO_MORE_FILES != GetLastError() ) { return false; } FindClose( hFile ); hFile = NULL; return true; } int main() { //遍历当前工作路径下ok目录下所有文件和文件夹 bool b = ForeachFileByDirectory( TEXT( ".\\ok" ) ); return 0; }
ok目录:
输出结果:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 如何重装TCP/IP协议
- 关于指针的一些事情
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- c++ primer 第五版 笔记前言
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- share_ptr的几个注意点
- 微软镜像下载
- windows server域用户提升到本地更高权限组中的方法
- 使用命令修改注册表键值及权限
- 通过手机、电脑远程开关机,Windows和linux机手机,电脑相互控制