[Win32 API] FindFirstFile()和FindNextFile()

[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)) {
		// 处理其它文件
	}
}

[Win32 API] FindFirstFile()和FindNextFile()

上一篇:Cygwin


下一篇:在Win10系统中,基于 Docker 构建 PHP 开发环境:Win10+Docker+Larad