#cpp #winapi #файловая_система
void getFiles(const string& inpath, string outpath) { string mask = inpath + "\\*"; WIN32_FIND_DATA FindFileData; HANDLE hf; hf = FindFirstFile(mask.c_str(), &FindFileData); ofstream output; output.open(outpath + "\\data.txt", ios_base::app); if (hf != INVALID_HANDLE_VALUE) { do { if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (strcmp(FindFileData.cFileName, ".") == 0 || strcmp(FindFileData.cFileName, "..") == 0) continue; getFiles(inpath + "\\" + FindFileData.cFileName, outpath); } else output << inpath << "\\" << FindFileData.cFileName << endl; } while (FindNextFile(hf, &FindFileData) != 0); FindClose(hf); } output.close(); } Есть такая функция, которая ищет файлы в выбранном каталоге и его подкаталогах, а потом записывает пути к файлам в data.txt. А как мне сделать так, чтобы эта функция искала только файлы с определенным расширением, например, .xml?
Ответы
Ответ 1
Вызов поиска файлов несколько раз с разными расширениями - неверная концепция. Работа с таблицей файлов (на диске) медленнее, чем обработка строк. Поэтому соберите все расширения в хэш-таблицу, список, массив или даже в одну строку, просканируйте файлы единожды с универсальной маской *. Для каждого найденного файла выделите его расширение и проверьте, есть ли оно в выбранной структуре, хранящей нужные расширения.
Комментариев нет:
Отправить комментарий