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);
}
}
留言列表