What function in WinApi32 is responsible for searching for files? And is it possible to specify the search parameters? For example, find files starting with a specific letter.

  • FindFirst / FindNext - Abyx
  • Why didn't you google "WinAPI Find file" ... - Vladimir Martyanov

2 answers 2

HANDLE FindFirstFile( LPCTSTR lpFileName, // Строка содержащая путь для поиска файлов. LPWIN32_FIND_DATA lpFindFileData // Информация о найденном файле ); BOOL FindNextFile( HANDLE hFindFile, // Указатель на файл из предыдущего поиска LPWIN32_FIND_DATA lpFindFileData // Информация об очередном найденном файле ); 
  • Wrote the code: LPWIN32_FIND_DATA data; HANDLE h = FindFirstFile (" . ", Data); if (! (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) cout << "File found!" << endl; For some reason, the error "The expression must have a class type" - JamesJGoodwin 10:26
  • @JamesJGoodwin: You do not need LPWIN32_FIND_DATA data , but WIN32_FIND_DATA data , and pass a pointer to this in the function. - VladD

Here is a minimal example from the MSDN documentation :

 #include <windows.h> #include <tchar.h> #include <stdio.h> #pragma comment(lib, "User32.lib") // ... WIN32_FIND_DATA FindFileData; HANDLE hFind = FindFirstFile(TEXT("C:\\W*"), &FindFileData); // ^^^^^^^^ это маска для поиска if (hFind == INVALID_HANDLE_VALUE) { _tprintf(TEXT("FindFirstFile failed (%d)\n"), GetLastError()); return; } do { if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { _tprintf(TEXT(" %s <DIR>\n"), ffd.cFileName); } else { LARGE_INTEGER filesize; filesize.LowPart = ffd.nFileSizeLow; filesize.HighPart = ffd.nFileSizeHigh; _tprintf(TEXT(" %s %ld bytes\n"), ffd.cFileName, filesize.QuadPart); } } while (FindNextFile(hFind, &ffd) != 0); DWORD dwError = GetLastError(); if (dwError != ERROR_NO_MORE_FILES) { _tprintf(TEXT("Listing failed (%d)\n"), GetLastError()); return; } FindClose(hFind); 

Functions used: FindFirstFile , FindNextFile , FindClose .