Этот код неверен по нескольким причинам.
Вы должны проверить возвращаемое значение FindFirstFile
.Если вызов FindFirstFile
успешен, то у вас уже есть первый файл в ffd
.Поскольку ваш код стоит, вы выбрасываете первый файл.Так что вам нужно заново настроить логику цикла, чтобы учесть это.Естественно, если GetLastError
возвращает ERROR_NO_MORE_FILES
, то это означает, что поиск исчерпал все файлы.
Итак, вероятно, вы запрашиваете первый файл, соответствующий строке поиска "d:\\validfolder"
.Возвращается в ffd
после вызова FindFirstFile
.Затем вы игнорируете эту информацию и запрашиваете следующий матч.Но последующего совпадения нет, поскольку существует только один объект, соответствующий "d:\\validfolder"
, поскольку вы не включили в шаблон поиска символы подстановки.
Этот код будет вести себя точно так же в XP, как и в Windows 7, и я подозреваючто вы не используете один и тот же код в обеих системах.
Если вы хотите перечислить содержимое папки, вам нужно выполнить поиск "d:\\validfolder\\*"
.Как то так:
string dir = "d:\\validfolder\\*";
WIN32_FIND_DATA ffd;
HANDLE h = FindFirstFile(dir.c_str(), &ffd);
BOOL success = h<>INVALID_HANDLE_VALUE;
while(success)
{
// do something with ffd
success = FindNextFile(h, &ffd));
}