VC遍历文件夹下所有文件和文件夹

简介: 一、先介绍一个结构WIN32_FIND_DATA typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; //文件属性 FILETIME ftCreationTime; // 文件创建时间 FILETIME ft...

一、先介绍一个结构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结构中去:

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<windows.h>
#include<iostream>
#include<string>
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);
}

目录
相关文章
|
域名解析 关系型数据库 MySQL
怎样用自己电脑搭建网络服务器!不花一分钱
怎样用自己电脑搭建网络服务器!不花一分钱
1774 1
|
10月前
|
虚拟化 数据安全/隐私保护
VMware Workstation Pro - 最新版
VMware是一款强大的虚拟机软件,可在单台计算机上模拟完整硬件系统,实现多系统运行。2024年5月推出最新版Workstation Pro 17.5.2,个人用户可免费使用。用户可通过官网下载并注册账户,按指引完成安装,适用于开发、测试及部署应用,具备高效灵活的虚拟化技术。
43473 1
|
Ubuntu Linux
在Linux中,想修改ip,需要编辑哪个配置⽂件?修改完配置⽂件后,如何重启网卡?使配置生效?
在Linux中,想修改ip,需要编辑哪个配置⽂件?修改完配置⽂件后,如何重启网卡?使配置生效?
|
Kubernetes 网络安全 容器
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
|
JSON 关系型数据库 MySQL
穿越MySQL版本时光:5.7和8.0的差异全揭秘
穿越MySQL版本时光:5.7和8.0的差异全揭秘
9171 0
|
Kubernetes 关系型数据库 MySQL
Docker终端无法输入中文问题解决
某日在docker里搭建了一套MySQL服务,发现在MySQL命令行内无法输入中文 中文显示也以?代替,起初以为是MySQL字符集的问题 检查之后未解决问题,又退出到容器终端 发现同样不能输入中文,由此推断 是系统字符集出现问题,现将解决过程记录如下:
1470 1
|
搜索推荐 安全 Linux
docker的离线安装以及本地化配置
docker的离线安装以及本地化配置
1573 0
|
分布式计算 Java Spark
Windows上搭建Standalone模式的Spark环境
在Windows上搭建Standalone Spark环境
8377 0
|
API 分布式数据库 C++
VC下加载多种格式图片的方法总结IPicture, CxImage, CImage(AtlImage), CPictureEx
尽管VC有提供相应的API和类来操作bmp位图、图标和(增强)元文件,但却不支持jpg、gif和png等格式的图片,而这几种格式却是常常要用到的。这里我给大家介绍两种办法来操作这些格式的图片。 1.用API OleLoadPicture来加载JPG、GIF格式的图片(注:不支持PNG格式,另外GI...
2080 0
|
网络协议 C++ 应用服务中间件