C++用FindFirstFile、FindNext递归遍历硬盘的文件
关于 WIN32_FIND_DATA 的数据结构
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; //文件属性
FILETIME ftCreationTime; // 文件创建时间
FILETIME ftLastAccessTime; // 文件最后一次访问时间
FILETIME ftLastWriteTime; // 文件最后一次修改时间
DWORD nFileSizeHigh; // 文件长度高32位
DWORD nFileSizeLow; // 文件长度低32位
DWORD dwReserved0; // 系统保留
DWORD dwReserved1; // 系统保留
TCHAR cFileName[ MAX_PATH ]; // 长文件名
TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;
#include <iostream>
#include <vector>
#include <windows.h>
using namespace std;class SearchFile
{
private:vector<string> result;
public:vector<string> getResult(){auto t = result;result.clear();return t;}bool search(char *path="C:\\",char *file="exe"){HANDLE hFile;char buffer[MAX_PATH]={0,};WIN32_FIND_DATA pNextInfo; //搜索得到的文件信息将储存在pNextInfo中;sprintf(buffer,"%s\\*.*",path);hFile = FindFirstFile(buffer,&pNextInfo);//请注意是 &pNextInfo , 不是 pNextInfo;if(!hFile){return false;}string t;//cout << buffer << endl;while(FindNextFile(hFile,&pNextInfo)){if(pNextInfo.cFileName[0] == '.')//过滤.和..continue;//cout << pNextInfo.cFileName << endl;if(pNextInfo.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY){ZeroMemory(buffer,MAX_PATH);sprintf(buffer,"%s\\%s",path,pNextInfo.cFileName);//cout << buffer << endl;search(buffer,file);}t.assign(path);t+='\\';t.append(pNextInfo.cFileName);int len = strlen(file);if(t.substr(t.size()-len)==file){result.push_back(t);//对t对象进行深复制}}return true;}
};int main() {SearchFile s;//设计了一个SearchFile类来搜索文件,调用search成员函数后,再调用getResult()返回查到的结果,如果搜索失败,getResult()返回NULLs.search("C:\\Users\\lxw\\OneDrive\\python35","py");auto result = s.getResult();for(int i=0;i<result.size();i++){cout << result[i] << endl;}return 0;
}
这里的IDE用的是CLion;
C++用FindFirstFile、FindNext递归遍历硬盘的文件相关推荐
- c语言findnext递归扫描文件,C++用FindFirstFile、FindNext递归遍历硬盘的文件-Go语言中文社区...
关于 WIN32_FIND_DATA 的数据结构 typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; //文件属性 FILETIME f ...
- python 递归遍历目录排序_python下递归遍历目录和文件
方法一:递归调用: import os def dirlist(path, allfile): filelist = os.listdir(path) for filename in filelis ...
- 8.递归遍历和删除案例
递归遍历和删除文件夹案例 package com.io.file;import java.io.File;/*** 递归遍历和删除*/ public class Demo3 {public stati ...
- c 遍历文件 递归遍历_将递归文件系统遍历转换为流
c 遍历文件 递归遍历 在学习编程的时候,回溯到Turbo Pascal的时代,我设法使用FindFirst , FindNext和FindClose函数在目录中列出文件. 首先,我想出了一个打印给定 ...
- C++Windows下递归遍历多级目录
#include <tchar.h> #include <Windows.h> #include <Shlwapi.h> #pragma comment( lib, ...
- 刷题:二叉树的非递归遍历方式
二叉树的非递归的遍历方式 上篇博客记录了二叉树的递归遍历方式以及根据二叉树的遍历结果还原二叉树的内容. 本篇博客记录二叉树的非递归的遍历方式. 二叉树的非递归遍历需要借助栈来实现,而且三种遍历的方式的 ...
- 二叉树 2.0 -- 非递归遍历
二叉树递归遍历存在的问题 如果我们的二叉树只有左子树,而且树的高度还很深的时候,这个时候递归调用遍历的时候,栈帧空间开辟的较大,很可能造成栈溢出.但是我们一个程序中,为堆分配的空间要比栈大的多,这个时 ...
- 【C++】【十一】二叉树递归遍历与非递归遍历的实现及思路
非递归遍历实现思路: #include <stdlib.h> #include <stdio.h> #include <iostream> #include & ...
- php 回调递归,PHP数组函数 array_walk_recursive (使用回调函数递归遍历数组元素)
在PHP中,数组函数 array_walk_recursive () 使用回调函数递归遍历数组元素. 函数语法:array_walk_recursive ( array &$array , c ...
最新文章
- xp系统安装oracle乱码,linux中安装Oracle汉字乱码完整解决方案
- 在Java中使用可信时间戳
- 图文详解 Kubernetes,刺激…
- 4.6 explain 之 rows
- SVN合并(merge)的使用
- 任务管理器显示不全 - 确定谁占用了我们的端口
- flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含
- [蓝桥杯2018决赛]阅兵方阵-模拟,枚举
- 深圳软件开发向前跳转会略过一些节点
- 解题:ZJOI 2006 书架
- matlab多种图像边缘检测方法,[转载]Matlab多种图像边缘检测方法
- 恒生校招java笔试数据库语法_2015恒生电子校招笔试题
- 微信图文插入超链接的相关问题解答
- 服务器上的word文件被锁定,Microsoft Word忽略从WebDAV服务器发送的锁定状态
- java 读取小数位数_java如何获取一个double的小数位数
- Power bi 3.12 瀑布图
- Linux热插拔hotplug处理流程
- SpringBoot(2)
- 【五、反向代理及其相关配置】
- 信用评分卡 (part 5 of 7)
热门文章
- Paper:《First Order Motion Model for Image Animation》翻译与解读
- C++:C++语言入门级基础知识考察点回顾之基本数据类型、流程控制
- YOLO:将yolo的.weights文件转换为keras、tensorflow等模型所需的.h5文件的图文教程
- (原创)7-1 银行业务队列简单模拟 (30 分)
- Appstore|IPA
- concurrent (二)AQS
- Mongodb利用aggregation实现抽样查询(按记录数和时间)
- ZOJ3163【思维题】
- Help:立体图绘制以及根据X,Y,Z三坐标值,在图上描点
- WIN5语音ic注意事项