1. 程式人生 > >Windows API遍歷檔案目錄、搜尋檔案

Windows API遍歷檔案目錄、搜尋檔案

涉及的標頭檔案有windows.h,stdio.h, 涉及的函式主要是FindFirstFile、FindNextFile函式 void list_current_dir() {     WIN32_FIND_DATA FileData;     HANDLE hSearch = NULL;     BOOL finished = FALSE;     printf("%d\n", sizeof(FILETIME));     printf("%d\n", sizeof(WIN32_FIND_DATA));     hSearch = FindFirstFile("*", &FileData);  // find for all files     if(hSearch == INVALID_HANDLE_VALUE)         return;   // No file found     while(!finished)     {         //puts(FileData.cFileName);    // print file name printf("%s\n", FileData.cFileName);         finished = !FindNextFile(hSearch, &FileData);   // find next file     }     FindClose(hSearch);  // finish searching } //查詢檔案  HANDLE WINAPI FindFirstFile(    __in          LPCTSTR lpFileName,//檔名或路徑    __out         LPWIN32_FIND_DATA lpFindFileData  );  //查詢下一個檔案  BOOL WINAPI FindNextFile(    __in          HANDLE hFindFile,    __out         LPWIN32_FIND_DATA lpFindFileData  );  typedef struct _WIN32_FIND_DATA {          DWORD dwFileAttributes;  //檔案屬性        FILETIME ftCreationTime;  //建立時間        FILETIME ftLastAccessTime;  //最近訪問時間        FILETIME ftLastWriteTime; //最近修改時間        DWORD nFileSizeHigh; //高位大小        DWORD nFileSizeLow;  //低位大小        DWORD dwReserved0;  //保留        DWORD dwReserved1;  //保留        TCHAR cFileName[MAX_PATH];//檔名,非全路徑          TCHAR cAlternateFileName[14];  }WIN32_FIND_DATA,*PWIN32_FIND_DATA,*LPWIN32_FIND_DATA; void FindFiles(CString &strPath)  {      WIN32_FIND_DATA findData;      CString strTemp = strPath;      strTemp.Format(_T("%s\\*.*"), strPath);//查詢指定目錄下的直接的所有檔案和目錄      HANDLE hFile = FindFirstFile(strTemp, &findData);      while (hFile != INVALID_HANDLE_VALUE)      {          if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//如果是目錄          {              if(findData.cFileName[0] != _T('.'))//排除.和..資料夾              {                  strTemp =  strPath+ CString("\\") + findData.cFileName;//獲得完整路徑                  FindFiles(strTemp);//遞迴查詢當前目錄的檔案              }          }          else          {              strTemp =  strPath+ CString("\\") + findData.cFileName;          }          if(!FindNextFile(hFile, &findData))          {              break;          }      }  }