Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* -------------------------------------FUNC----------------------------------------------*/
- typedef void(*LPSEARCHFUNC)(LPCTSTR lpszFileName);
- BOOL SearchFiles(LPCTSTR lpszFileName, LPSEARCHFUNC lpSearchFunc, BOOL bInnerFolders = TRUE) //маска или имя,
- { //ф-ция для работы с найденным файлом,
- LPTSTR part; //рекурсивно?
- char tmp[MAX_PATH]; //временный массив
- char name[MAX_PATH];
- HANDLE hSearch = NULL;
- WIN32_FIND_DATA wfd;
- memset(&wfd, 0, sizeof(WIN32_FIND_DATA));
- //сначала поиск внутри вложенных папках...
- if (bInnerFolders)
- {
- if (GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) return FALSE;
- strcpy(name, part);
- strcpy(part, "*.*");
- //если папки существуют, то делаем поиск
- wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
- if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
- do
- {
- // в каждой папке есть две папки с именами "." и ".."
- // и эти папки мы не трогаем
- // пропускаем папки "." и ".."
- if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))
- continue;
- if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // если мы нашли папку
- {
- char next[MAX_PATH];
- if (GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
- strcpy(part, wfd.cFileName);
- strcat(next, "\\");
- strcat(next, name);
- SearchFiles(next, lpSearchFunc, TRUE);
- }
- } while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
- FindClose(hSearch); // заканчиваем поиск
- }
- if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE)
- return TRUE; // в противном случае выходим
- do
- if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // если мы нашли файл
- {
- char file[MAX_PATH];
- if (GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
- strcpy(part, wfd.cFileName);
- lpSearchFunc(file); //выполняем действие, передав в нужную ф-цию путь к найденному файлу
- }
- while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
- FindClose(hSearch); // заканчиваем поиск
- return TRUE;
- }
- /* -------------------------------------USAGE----------------------------------------------*/
- //Для работы с файлом
- void Work(LPCTSTR lpszFileName)
- {
- //действия
- }
- std::string d = "\\Desktop";
- std::string desktop = getenv("Userprofile") + d;
- std::string desktopsearchTXT = desktop + "\\*.txt"; //"C:\\Users\\Username\\Desktop\\*.txt" например - будет искать все .txt файлы.
- SearchFiles(desktopsearchTXT.c_str(), Work, TRUE);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement