Advertisement
Guest User

Untitled

a guest
May 21st, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.94 KB | None | 0 0
  1. /* -------------------------------------FUNC----------------------------------------------*/
  2. typedef void(*LPSEARCHFUNC)(LPCTSTR lpszFileName);
  3. BOOL SearchFiles(LPCTSTR lpszFileName, LPSEARCHFUNC lpSearchFunc, BOOL bInnerFolders = TRUE) //маска или имя,
  4. {                                                                                            //ф-ция для работы с найденным файлом,
  5.     LPTSTR part;                                                                             //рекурсивно?
  6.     char tmp[MAX_PATH]; //временный массив
  7.     char name[MAX_PATH];
  8.     HANDLE hSearch = NULL;
  9.     WIN32_FIND_DATA wfd;
  10.     memset(&wfd, 0, sizeof(WIN32_FIND_DATA));
  11.     //сначала поиск внутри вложенных папках...
  12.     if (bInnerFolders)
  13.     {
  14.         if (GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) return FALSE;
  15.         strcpy(name, part);
  16.         strcpy(part, "*.*");
  17.         //если папки существуют, то делаем поиск
  18.         wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
  19.         if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
  20.             do
  21.             {
  22.                 // в каждой папке есть две папки с именами "." и ".."
  23.                 // и эти папки мы не трогаем
  24.                 // пропускаем папки "." и ".."
  25.                 if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))
  26.                     continue;
  27.                 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // если мы нашли папку
  28.                 {
  29.                     char next[MAX_PATH];
  30.                     if (GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
  31.                     strcpy(part, wfd.cFileName);
  32.                     strcat(next, "\\");
  33.                     strcat(next, name);
  34.                     SearchFiles(next, lpSearchFunc, TRUE);
  35.                 }
  36.             } while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
  37.             FindClose(hSearch); // заканчиваем поиск
  38.     }
  39.  
  40.     if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE)
  41.         return TRUE; // в противном случае выходим
  42.     do
  43.         if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // если мы нашли файл
  44.         {
  45.             char file[MAX_PATH];
  46.             if (GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
  47.             strcpy(part, wfd.cFileName);
  48.             lpSearchFunc(file); //выполняем действие, передав в нужную ф-цию путь к найденному файлу
  49.         }
  50.     while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
  51.     FindClose(hSearch); // заканчиваем поиск
  52.     return TRUE;
  53. }
  54. /* -------------------------------------USAGE----------------------------------------------*/
  55. //Для работы с файлом
  56. void Work(LPCTSTR lpszFileName)
  57. {
  58. //действия
  59. }
  60. std::string d = "\\Desktop";
  61. std::string desktop = getenv("Userprofile") + d;
  62. std::string desktopsearchTXT = desktop + "\\*.txt"; //"C:\\Users\\Username\\Desktop\\*.txt" например - будет искать все .txt файлы.
  63. SearchFiles(desktopsearchTXT.c_str(), Work, TRUE);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement