[Win32 API] FindFirstFile()和FindNextFile()
FindFirstFile()
用法:
HANDLE FindFirstFile(
LPCSTR lpFileName,
LPWIN32_FIND_DATA lpFindFileData);
该函数查找符合条件的第一个文件
第一个参数类型常量字符串,表示要查找的文件名
第二个参数类型LPWIN32_FIND_DATA,找到的文件信息将储存在它指向的WIN32_FIND_DATA结构体中
WIN32_FIND_DATA长这样:
typedef struct _WIN32_FIND_DATAA {
DWORD dwFileAttributes; // 文件属性
FILETIME ftCreationTime; // 创建时间
FILETIME ftLastAccessTime; // 最后一次访问的时间
FILETIME ftLastWriteTime; // 最后一次写入的时间
DWORD nFileSizeHigh; // 文件大小(高位)
DWORD nFileSizeLow; // 文件大小(低位)
DWORD dwReserved0; // 和第一个成员有关
DWORD dwReserved1;
CHAR cFileName[MAX_PATH]; // 文件名
CHAR cAlternateFileName[14]; // 8.3格式文件名
DWORD dwFileType; // 文件类型
DWORD dwCreatorType;
WORD wFinderFlags;
} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
_WIN32_FIND_DATAW类似
返回值类型是HANDLE,用于FindNextFile()
如果该值等于INVALID_HANDLE_VALUE,表示没找到目标文件
注意文件名可以包含通配符‘?‘和‘*‘
FindNextFile()
用法:
BOOL FindNextFile(
HANDLE hFindFile,
LPWIN32_FIND_DATA lpFindFileData
);
该函数查找下一个目标文件,需和FindFirstFile()配合使用
第一个参数是FindFirstFile()返回的句柄
第二个参数用来储存找到的文件的信息
如果找到了目标文件,返回True,否则返回False
示例:遍历当前文件夹下的文件及文件夹
WIN32_FIND_DATA fdFile;
HANDLE hFile = FindFirstFile(L"*.*", &fdFile);
if (hFile == INVALID_HANDLE_VALUE) {
// 没找到
} else {
// 处理第一个文件
while (FindNextFile(hFile, &fdFile)) {
// 处理其它文件
}
}