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);}