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?
Ответ
Вызов поиска файлов несколько раз с разными расширениями - неверная концепция. Работа с таблицей файлов (на диске) медленнее, чем обработка строк.
Поэтому соберите все расширения в хэш-таблицу, список, массив или даже в одну строку, просканируйте файлы единожды с универсальной маской *. Для каждого найденного файла выделите его расширение и проверьте, есть ли оно в выбранной структуре, хранящей нужные расширения.
Комментариев нет:
Отправить комментарий