9-网络文件截取:文件遍历

网络文件截取:文件遍历

1.window下的文件结构体:WIN32_FIND_DATA

定义如下,分别为文件

typedef struct _WIN32_FIND_DATAW {
DWORD dwFileAttributes; //属性
FILETIME ftCreationTime; //创建时间
FILETIME ftLastAccessTime; //最后一次访问时间
FILETIME ftLastWriteTime; //最后一次写入时间
DWORD nFileSizeHigh; //文件大小的高位
DWORD nFileSizeLow; //文件大小的低位
DWORD dwReserved0; //保留字
DWORD dwReserved1; //保留字
_Field_z_ WCHAR cFileName[ MAX_PATH ]; //文件名
_Field_z_ WCHAR cAlternateFileName[ 14 ]; //改变之后的文件名
}

2.找到第一个文件

使用FindFirstFile来找到指定路径下的第一个文件

参数:

  • 指定路径

  • 存储找到的文件信息的结构体地址(WIN32_FIND_DATA)

返回值:

  • 找到的文件句柄

HANDLE hListFile;						//用句柄来标志文件

char szFilePath[MAX_PATH] = { 0 };
strcpy(szFilePath, szPath);
strcat(szFilePath, "\\*");
//找到第一个文件
hListFile = FindFirstFile(szFilePath, &file_for_find);

3.根据找到的第一个文件的句柄找到下一个文件

使用FindNextFile函数找到对应句柄目录下的下一个文件

参数:

  • 文件句柄

  • 存储找到的文件信息的结构体地址(WIN32_FIND_DATA)

返回值:

  • BOOL:下一个文件存在

do {
char mypath[MAX_PATH] = { 0 };
strcpy(mypath, szPath);
strcat(mypath, file_for_find.cFileName);
printf("mypath = %s\n", mypath);
} while (FindNextFile(hListFile, &file_for_find));

完整代码

#include<iostream>
#include<Windows.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;

int DoSteal(const char* szPath)
{
//1 遍历路径下所有文件夹
WIN32_FIND_DATA file_for_find; //文件数据
HANDLE hListFile; //用句柄来标志文件

char szFilePath[MAX_PATH] = { 0 };
strcpy(szFilePath, szPath);
strcat(szFilePath, "\\*");
//2 找到第一个文件
hListFile = FindFirstFile(szFilePath, &file_for_find);
//3 循环遍历所有文件
do {
char mypath[MAX_PATH] = { 0 };
strcpy(mypath, szPath);
strcat(mypath, file_for_find.cFileName);
printf("mypath = %s\n", mypath);
} while (FindNextFile(hListFile, &file_for_find));

return 0;
}
int main()
{
DoSteal("D:\\文件合集\\");
return 0;
}