BOOL CFileUtil::FindFiles(const char*szInDirectory, BOOL bDirs, const char*szInName, const char*szExtension, CArrayChars* paszFiles, BOOL bHidden) { WIN32_FIND_DATA sFindData; CChars szFindName; CChars szTemp; HANDLE hFindHandle; BOOL bContinue; int iFileExtension; BOOL bValid; CChars szFake; CChars szDirectory; szDirectory.Init(szInDirectory); FullPath(&szDirectory); szFindName.Init(szDirectory); AppendToPath(&szFindName, "*.*"); hFindHandle = FindFirstFile(szFindName.Text(), &sFindData); bContinue = (hFindHandle != INVALID_HANDLE_VALUE); if (!bContinue) { szDirectory.Kill(); szFindName.Kill(); return FALSE; } while (bContinue) { if (!(sFindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) || bHidden) { bValid = TRUE; if (sFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (bDirs) { if (szInName != NULL) { szTemp.Init(sFindData.cFileName); RemoveExtension(&szTemp); if (!szTemp.ContainsIgnoreCase(szInName)) { bValid = FALSE; } szTemp.Kill(); } } else { bValid = FALSE; } } else { if (!bDirs) { if (szExtension != NULL) { szFake.Fake(sFindData.cFileName); iFileExtension = FindExtension(szFake.Text()); if (iFileExtension != -1) { if (!(szFake.SubStringEquals(iFileExtension+1, szExtension))) { bValid = FALSE; } } else { //If there is no file extension on the current file and the //extension being looked for is not empty... if (szExtension[0] != 0) { //Then this file is not valid. bValid = FALSE; } } } if (szInName != NULL) { szTemp.Init(sFindData.cFileName); RemoveExtension(&szTemp); if (!szTemp.ContainsIgnoreCase(szInName)) { bValid = FALSE; } szTemp.Kill(); } } else { bValid = FALSE; } } } else { bValid = FALSE; } if (bValid) { if (!((strcmp(sFindData.cFileName, ".") == 0) || (strcmp(sFindData.cFileName, "..") == 0))) { szTemp.Init(szDirectory); AppendToPath(&szTemp, sFindData.cFileName); paszFiles->Add(szTemp.Text()); szTemp.Kill(); } } bContinue = FindNextFile(hFindHandle, &sFindData); } FindClose(hFindHandle); szDirectory.Kill(); szFindName.Kill(); return TRUE; }