1 //查找文件
 2 HANDLE WINAPI FindFirstFile(
 3   __in          LPCTSTR lpFileName,//文件名或路径
 4   __out         LPWIN32_FIND_DATA lpFindFileData
 5 );
 6 
 7 //查找下一个文件
 8 BOOL WINAPI FindNextFile(
 9   __in          HANDLE hFindFile,
10   __out         LPWIN32_FIND_DATA lpFindFileData
11 );
12 
13 typedef struct _WIN32_FIND_DATA {  
14       DWORD dwFileAttributes;  //文件属性
15       FILETIME ftCreationTime;  //创建时间
16       FILETIME ftLastAccessTime;  //最近访问时间
17       FILETIME ftLastWriteTime; //最近修改时间
18       DWORD nFileSizeHigh; //高位大小
19       DWORD nFileSizeLow;  //低位大小
20       DWORD dwReserved0;  //保留
21       DWORD dwReserved1;  //保留
22       TCHAR cFileName[MAX_PATH];//文件名,非全路径 
23        TCHAR cAlternateFileName[14];
24 }WIN32_FIND_DATA,*PWIN32_FIND_DATA,*LPWIN32_FIND_DATA;

实例代码:

 1 void FindFiles(CString &strPath)
 2 
 3 {
 4     WIN32_FIND_DATA findData;
 5 
 6     CString strTemp = strPath;
 7     strTemp.Format(_T("%s\\*.*"), strPath);//查找指定目录下的直接的所有文件和目录
 8 
 9     HANDLE hFile = FindFirstFile(strTemp, &findData);
10     while (hFile != INVALID_HANDLE_VALUE)
11     {
12         if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//如果是目录
13         {
14             if(findData.cFileName[0] != _T('.'))//排除.和..文件夹
15             {
16 
17                 strTemp =  strPath+ CString("\\") + findData.cFileName;//获得完整路径
18                 FindFiles(strTemp);//递归查找当前目录的文件
19             }
20         }
21         else
22         {
23             strTemp =  strPath+ CString("\\") + findData.cFileName;
24         }
25 
26         if(!FindNextFile(hFile, &findData))
27         {
28             break;
29         }
30     }
31 
32 }