BCB-取得指定目錄下特定副檔名的所有檔案到特定資料夾-WinAPI應用


這一段程式碼是可以取得指定目錄及其子目錄下,所有副檔名為 .url 的檔案 (沒錯,這就是拿來掃瞄 IE 我的最愛),取得的所有檔名會存放在一個名叫 sList 的 StringList 裡頭。



void __fastcall TForm1::LoadFavorite(AnsiString Dir, TStringList *sList) // Dir 就是你要掃瞄的目錄, sList 拿來存放檔名

{

   WIN32_FIND_DATA filedata; // Structure for file data
   HANDLE filehandle;        // Handle for searching
   AnsiString szFileName, szDir;


   szDir = IncludeTrailingPathDelimiter(Dir); // 確保最後有反斜線
   filehandle = FindFirstFile((szDir + "*.*").c_str(), &filedata); // 因為我們要包含子目錄,所以要用 *.*,不然直接用 *.url 就行了


   if (filehandle != INVALID_HANDLE_VALUE){
      do{
         /* 不處理隱藏檔及 . 跟 .. */
         if((filedata.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) != 0 ||
            strcmp(filedata.cFileName, ".") == 0 || strcmp(filedata.cFileName, "..") == 0)
            continue;

         /* 若是資料夾 */
         if((filedata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0){
            szFileName = szDir + AnsiString(filedata.cFileName);// 資料夾完整路徑
            Application->ProcessMessages();
            LoadFavorite(szFileName); // 遞迴找下一層目錄
         }else if (ExtractFileExt(filedata.cFileName).LowerCase() == ".url"){    // 若找到的檔案的副檔名是 .url
            szFileName = szDir + AnsiString(filedata.cFileName);
            sList->Add(szFileName);// 將完整路徑加到 sList 裡頭
            Application->ProcessMessages();
         }

      }while(FindNextFile(filehandle, &filedata));

      FindClose(filehandle);
   }
}

arrow
arrow

    yao67 發表在 痞客邦 留言(0) 人氣()