博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】VC遍历文件夹下所有文件和文件夹
阅读量:5790 次
发布时间:2019-06-18

本文共 2171 字,大约阅读时间需要 7 分钟。

hot3.png

一、先介绍一个结构WIN32_FIND_DATA
VC遍历文件夹下所有文件和文件夹
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结构中去:
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参数指定的文件名相符的所有文件
 
四、下面是遍历代码
#include
#include
#include
using namespace std;//只能处理目录:lpPath只能是路径 find(char * lpPath){  char szFind[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;    }    if(!FindNextFile(hFind,&FindFileData)){  break;}  }  FindClose(hFind);}

转载于:https://my.oschina.net/mrcamus/blog/150771

你可能感兴趣的文章
Windwos Server 2008 R2 DHCP服务
查看>>
SAS和SATA硬盘的区别
查看>>
现代程序设计 学生情况调查
查看>>
U盘安装linux后无法引导
查看>>
C# 矩阵作业
查看>>
俺的新书《Sencha Touch实战》终于出版了
查看>>
关于数据库查询时报“query block has incorrect number of result columns”
查看>>
li下的ul----多级列表
查看>>
UVa 11292 勇者斗恶龙(The Dragon of Loowater)
查看>>
线程退出时执行函数,处理资源
查看>>
java中关于时间的格式化
查看>>
Wine QQ2012 笔记
查看>>
vue全选和取消全选(无bug)
查看>>
qml demo分析(clocks-时钟)
查看>>
vue去掉#——History模式
查看>>
2018年7月第一周网站建站笔记
查看>>
MongoDB工具MagicMongoDBTool使用介绍(一) -- 简单MongoDB入门
查看>>
javascript的事件
查看>>
201521123009 《Java程序设计》第1周学习总结
查看>>
年终述职--常见问题分析解答
查看>>