WIN32 C++ 遍历文件夹
转自:http://blog.csdn.net/lizhigang770/archive/2010/11/30/6045242.aspx
一、先介绍一个结构 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 ]; // 文件的可选名
} WIN32_FIND_DATA;
可以通过 FindFirstFile ()函数,根据文件路径把待操作文件的相关属性读取到 WIN32_FIND_DATA 结构中去:
四、下面是遍历代码
#include<windows.h>
#include<iostream>
#include<string>
using namespace std;
//只能处理目录:lpPath只能是路径
void find(char *lpPath)
{
char szFind[MAX_PATH];
char szFile[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);
strcat(szFind,"//*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"//");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
cout<<FindFileData.cFileName<<endl;
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
//可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符
void _find(string path)
{
//取路径名最后一个"//"之前的部分,包括"//"
string prefix=path.substr(0,path.find_last_of('//')+1);
WIN32_FIND_DATA FindFileData;
HANDLE hFind=::FindFirstFile(path.c_str(),&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
{
cout<<"文件通配符错误"<<endl;
return;
}
while(TRUE)
{
//目录
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//不是当前目录,也不是父目录
if(FindFileData.cFileName[0]!='.')
{
//查找下一级目录
_find(prefix+FindFileData.cFileName+'//'+"*.*");
}
}
//文件
else
{
cout<<FindFileData.cFileName<<endl;
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
void main()
{
find("E:");//目录:E盘
_find("E://*.*");//E盘下所有文件
string str=".//";
string path;
cout<<"请输入文件通配符:"<<flush;
cin>>path;
str=str+path;
find((char*)str.c_str());//可以处理".",".." 不可以处理"*","..//*"
_find(str);//可以处理"*","..//*" 不可以处理".",".."
}
WIN32_FIND_DATA ffd;
HANDLE hFind = FindFirstFile("c://test.dat",&ffd);
二、函数 FindFirstFile
1 、声明 : HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData);
2 、参数 :
lpFileName String ,欲搜索的文件名。可包含通配符,并可包含一个路径或相对路径名
lpFindFileData WIN32_FIND_DATA ,一个 WIN32_FIND_DATA 指针, 用于装载与找到的文件有关的信息,该结构可用于后续的搜索
3 、返回值 :
如执行成功,返回一个搜索句柄。如果出错,返回一个 INVALID_HANDLE_VALUE 常数,一旦不再需要,应该用 FindClose 函数关闭这个句柄
4 、功能
读取文件信息到一个 WIN32_FIND_DATA 结构中,返回这个文件的句柄
5 、注释:
由这个函数返回的句柄可以作为一个参数用于 FindNextFile 函数。这样一来,就可以方便的枚举出与 lpFileName 参数指定的文件名相符的所有文件(是指文件名含有通配符)
三、函数 FindNextFile
1 、声明 BOOL FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData);
2 、参数 :
HANDLE hFindFile 搜索的文件句柄,函数执行的时候搜索的是此句柄的下一文件
LPWIN32_FIND_DATA lpFindFileData 一个 WIN32_FIND_DATA 指针,
3 、返回值 :
如果调用成功返回一个非 0 值;调用失败,返回为 0 ,可调用 GetLastError 来获取错误信息
4 、功能
继续查找 FindFirstFile 函数搜索后的文件
5 、注释:
这个函数可以连续调用,以方便的枚举出与 lpFileName 参数指定的文件名相符的所有文件
其它参考文献:http://www.cnblogs.com/summerRQ/articles/2375749.html
WIN32 C++ 遍历文件夹相关推荐
- ASP.NET2.0 遍历文件夹下所有图片【月儿原创】
ASP.NET2.0 遍历文件夹下所有图片 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.4.4 1.以下目录有若干图片(都是 ...
- OpenCV实现遍历文件夹下所有文件
OpenCV中有实现遍历文件夹下所有文件的类Directory,它里面包括3个成员函数:(1).GetListFiles:遍历指定文件夹下的所有文件,不包括指定文件夹内的文件夹:(2).GetList ...
- Linux下遍历文件夹的实现
转自:http://blog.csdn.net/wallwind/article/details/7528474 linux C 遍历目录及其子目录 #include <stdio.h> ...
- python根据文件名或后缀名遍历文件夹下所有文件或图片的路径,并计算文件行数
python遍历文件夹下所有文件或图片的路径 代码 指定目录下的指定后缀文件 import glob #获取指定目录下的所有图片 print (glob.glob("\\home\\qiao ...
- java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append
1.从HDFS中读取数据 Configuration conf = getConf(); Path path = new Path(pathstr); FileSystem fs = FileSyst ...
- linux遍历文件夹下所有文件大小,Linux系统遍历文件夹 获取文件大小的操作(C语言实现)...
/** linux 下遍历文件夹以及获取文件大小 */ #include #include #include #include /** 获取文件大小,但是文件大小不能超过2G ,该方法不推荐使用 */ ...
- python遍历文件夹下所有文件大小_python遍历文件夹读取文件大小 | 学步园
闲来无事,写了个小程序删除内存卡中大于50m的文件 # filename itertaorfilefolder import os import os.path filePath = raw_inp ...
- Delphi下遍历文件夹下所有文件的递归算法
{------------------------------------------------------------------------------- 过程名: MakeFileLis ...
- python批量删除文件1001python批量删除文件_Python实现递归遍历文件夹并删除文件...
思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹 ...
最新文章
- 你能分清多进程与多线程吗?
- java 自定义类加载器_Java-JVM 自定义类加载器
- Pipe HDU - 2150(判断线段相交+向量叉乘线代详解)
- [CodeJam 2019 Round 3] Rancake Pyramid(笛卡尔树)
- dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》
- 基于Java+SpringBoot+vue+element实现校园闲置物品交易网站
- Spring JDBC和JdbcTemplate CRUD与DataSource示例
- 红橙Darren视频笔记 模板模式的应用与BaseActivity
- influx 操作_InfluxDB学习之InfluxDB的基本操作-阿里云开发者社区
- (14) ZYNQ AXI4-Lite总线简介(学无止境)
- RemoteDebug iOS Webkit Adapter(适配器):一个可以让你(随时)随地调试Safari、 iOS WebView(的适配器)
- 系统自带不起眼但很强杀毒工具
- Win系统 - 如何解决 Windows + P 键无法切换双显复制模式?
- 网易云音乐产品体验报告
- 位置不可用无法访问介质受写入保护 chkdsk无法修复. 不知道怎样找到呢?
- 杭州电子科技大学acm--2011
- 解决win11/win10无法安全拔出移动硬盘的问题 - U盘无法“安全删除并弹出媒体”
- Tableau:树状图
- linux脚本date命令,Shell之date命令用法
- 解决超微主板双卡显示器不亮问题
热门文章
- 训练LaneATT遇到CUDA_HOME环境变量问题
- 深度学习--TensorFlow (1)单层感知器1 -- 实现单数据训练
- 【seaborn】(1) 数据可视化,绘图风格、布局
- 吴恩达神经网络和深度学习——第三周笔记
- 舒工给您娓娓道来:2019-nCoV,教室布局筛查追溯系统算法解密!
- Windows DOS窗口查看历史执行过的命令的三种方式
- 在ubuntu 14.04 64bit上安装酷我音乐盒Linux客户端kwplayer
- 读书:有趣 -- 酒鬼与圣徒
- Contos7 克隆实例 以及 配置网络-服务-等相关信息
- JSP和Servlet学习笔记1 - 访问配置