Не отображается первый файл при рекурсивном поиске в папке
Я написал код для того что-бы найти картинки в папке
bool find(std::string path, std::string need)
{
std::string ppath = path + "\\" + need;
WIN32_FIND_DATAA winFD;
HANDLE hFile = FindFirstFileA(ppath.c_str(), &winFD);
if (hFile != INVALID_HANDLE_VALUE)
{
while (FindNextFileA(hFile, &winFD))
{
std::cout << "FILE:\t" << path + "\\" << winFD.cFileName << std::endl;
}
}
return 0;
}
int main()
{
setlocale(LC_ALL, "RUS");
find("C:\\Users\\user\\Desktop\\png", "*.png");
}
Но при запуске выводит только 3-и файла а который идёт первый пропускает
FILE: C:\Users\user\Desktop\png\14.png
FILE: C:\Users\user\Desktop\png\PPS.png
FILE: C:\Users\user\Desktop\png\SMS.png
Как я могу сделать что бы выводилось вместе с 1-м файлом?
Ответы (1 шт):
Автор решения: Maxim Timakov
→ Ссылка
Так как первый файл находится вызовом функции FindFirstFile, то возможны два варианта исправления:
- дублировать тело цикла перед его началом
- переделать цикл на
do { ... } while(...);
Дублирование кода зачастую вносит дополнительные ошибки, поэтому остановимся на цикле с постусловием:
HANDLE hFile = FindFirstFileA(ppath.c_str(), &winFD);
if (hFile == INVALID_HANDLE_VALUE)
{
return false;
}
do
{
// обработка файла
std::cout << "FILE:\t" << path + "\\" << winFD.cFileName << std::endl;
}
while (FindNextFileA(hFile, &winFD));
// не забываем освобождать ресурсы
FindClose(hFile);
return true;
