// SearchForFiles.cpp // // Revision Log // // Date Who SAR Notes // ========== === ======= ===================================== // 2002-02-20 mph Initial coding by Mark Henri of // MPH Software - markhenri@attbi.com // // #pragma warning(disable: 4786) #include "SearchForFiles.h" void CSearchForFiles::AddMask(const char* s) { masks.push_back(s); } void CSearchForFiles::Run(const char* startdir, bool recurse) { FindDirectories(startdir); } void CSearchForFiles::FoundOne(std::string& dir, std::string& name, WIN32_FIND_DATA& sfd) { MessageBeep(MB_OK); } void CSearchForFiles::FindFiles(std::string dir) { WIN32_FIND_DATA sfd; for (std::vector::iterator i = masks.begin(); i != masks.end(); i++) { std::string filename = *i; std::string mask = dir + "\\"; mask += filename; HANDLE h = FindFirstFile(mask.c_str(), &sfd); if (h != INVALID_HANDLE_VALUE) { do { // skip any directories that match the mask //if (sfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // continue; std::string fn = sfd.cFileName; FoundOne(dir, fn, sfd); } while (FindNextFile(h, &sfd)); FindClose(h); } } } void CSearchForFiles::FindDirectories(std::string dir, bool recurse) { // // look for directories recursively // WIN32_FIND_DATA sfd; std::string mask = dir + "\\*"; HANDLE h = FindFirstFile(mask.c_str(), &sfd); if (h != INVALID_HANDLE_VALUE) { do { // do something with the file name sfd.cFileName... std::string fn = sfd.cFileName; if (sfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (fn != "." && fn != "..") { if (recurse) { std::string s = dir; s += "\\"; s += sfd.cFileName; FindDirectories(s); } } } } while (FindNextFile(h, &sfd)); FindClose(h); // // now look for the fileLocations // FindFiles(dir); } }