FindFirstFileW-Funktion (fileapi.h)

Durchsucht ein Verzeichnis nach einer Datei oder einem Unterverzeichnis mit einem Namen, der mit einem bestimmten Namen (oder bei Verwendung von Platzhaltern mit einem Teil eines Namens) übereinstimmt.

Um zusätzliche Attribute anzugeben, die in einer Suche verwendet werden sollen, verwenden Sie die FindFirstFileEx-Funktion .

Um diesen Vorgang als transaktionierten Vorgang auszuführen, verwenden Sie die FindFirstFileTransacted-Funktion .

Syntax

HANDLE FindFirstFileW(
  [in]  LPCWSTR            lpFileName,
  [out] LPWIN32_FIND_DATAW lpFindFileData
);

Parameter

[in] lpFileName

Das Verzeichnis oder den Pfad und der Dateiname. Der Dateiname kann Platzhalterzeichen enthalten, z. B. ein Sternchen (*) oder ein Fragezeichen (?).

Dieser Parameter darf nicht NULL sein, keine ungültige Zeichenfolge (z. B. eine leere Zeichenfolge oder eine Zeichenfolge, der das beendende NULL-Zeichen fehlt) oder in einem nachfolgenden umgekehrten Schrägstrich (\) enden.

Wenn die Zeichenfolge mit einem Feldhalter, einem Punkt (.) oder einem Verzeichnisnamen endet, muss der Benutzer über Zugriffsberechtigungen für den Stamm und alle Unterverzeichnisse im Pfad verfügen.

Standardmäßig ist der Name auf MAX_PATH Zeichen beschränkt. Um dieses Limit auf 32.767 breite Zeichen zu erweitern, müssen Sie dem Pfad "\\?\" voranstellen. Weitere Informationen finden Sie unter Benennen von Dateien, Pfaden und Namespaces.

Tipp

Ab Windows 10 Version 1607 können Sie die MAX_PATH-Einschränkung entfernen, ohne "\\?\" vorauszustellen. Weitere Informationen finden Sie im Abschnitt "Maximale Pfadlängenbegrenzung" unter Benennung von Dateien, Pfaden und Namespaces .

[out] lpFindFileData

Ein Zeiger auf die WIN32_FIND_DATA-Struktur , die Informationen zu einer gefundenen Datei oder einem gefundenen Verzeichnis empfängt.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Suchhandle, das in einem nachfolgenden Aufruf von FindNextFile oder FindClose verwendet wird, und der lpFindFileData-Parameter enthält Informationen über die erste Gefundene Datei oder das erste gefundene Verzeichnis.

Wenn die Funktion dateien aus der Suchzeichenfolge im lpFileName-Parameter nicht finden kann, ist der Rückgabewert INVALID_HANDLE_VALUE , und der Inhalt von lpFindFileData ist unbestimmt. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie die GetLastError-Funktion auf.

Wenn die Funktion fehlschlägt, weil keine übereinstimmenden Dateien gefunden werden können, gibt die GetLastError-FunktionERROR_FILE_NOT_FOUND zurück.

Hinweise

Die FindFirstFile-Funktion öffnet ein Suchhandle und gibt Informationen zur ersten Datei zurück, die das Dateisystem mit einem Namen findet, der dem angegebenen Muster entspricht. Dies kann die erste Datei oder das erste Verzeichnis sein, das in einer Verzeichnisauflistungsanwendung (z. B. dem Befehl dir) angezeigt wird, wenn dasselbe Dateinamenzeichenfolgenmuster angegeben wird. Dies liegt daran, dass FindFirstFile keine Sortierung der Suchergebnisse durchführt. Weitere Informationen finden Sie unter FindNextFile.

In der folgenden Liste werden einige andere Suchmerkmale identifiziert:

  • Die Suche erfolgt ausschließlich nach dem Namen der Datei, nicht nach Attributen wie einem Datum oder einem Dateityp (weitere Optionen finden Sie unter FindFirstFileEx).
  • Die Suche umfasst die langen und kurzen Dateinamen.
  • Ein Versuch, eine Suche mit einem nachfolgenden umgekehrten Schrägstrich zu öffnen, schlägt immer fehl.
  • Das Übergeben einer ungültigen Zeichenfolge, NULL oder leeren Zeichenfolge für den lpFileName-Parameter ist keine gültige Verwendung dieser Funktion. Die Ergebnisse sind in diesem Fall nicht definiert.
Hinweis In seltenen Fällen oder auf einem stark geladenen System sind Dateiattributeinformationen auf NTFS-Dateisystemen zum Zeitpunkt des Aufrufs dieser Funktion möglicherweise nicht aktuell. Rufen Sie die GetFileInformationByHandle-Funktion auf, um die aktuellen NTFS-Dateisystemdateiattribute zu erhalten.
 
Nachdem das Suchhandle eingerichtet wurde, können Sie es verwenden, um mit der FindNextFile-Funktion nach anderen Dateien zu suchen, die demselben Muster entsprechen.

Wenn das Suchhandle nicht mehr benötigt wird, schließen Sie es mithilfe der Funktion FindClose und nicht mit CloseHandle.

Wie bereits erwähnt, können Sie keinen nachgestellten umgekehrten Schrägstrich (\) in der Eingabezeichenfolge lpFileName für FindFirstFile verwenden. Daher ist es möglicherweise nicht offensichtlich, wie Stammverzeichnisse durchsucht werden. Wenn Sie Dateien anzeigen oder die Attribute eines Stammverzeichnisses abrufen möchten, gelten die folgenden Optionen:

  • Um Dateien in einem Stammverzeichnis zu untersuchen, können Sie "C:\*" verwenden und das Verzeichnis mithilfe von FindNextFile schrittweise durchlaufen.
  • Um die Attribute eines Stammverzeichnisses abzurufen, verwenden Sie die GetFileAttributes-Funktion .
Hinweis Die Zeichenfolge "\\?\" lässt keinen Zugriff auf das Stammverzeichnis zu.
 

Auf Netzwerkfreigaben können Sie einen lpFileName in Form von "\\Server\Share\*" verwenden. Sie können jedoch keinen lpFileName verwenden, der auf die Freigabe selbst verweist. beispielsweise ist "\\Server\Share" ungültig.

Um ein Verzeichnis zu untersuchen, das kein Stammverzeichnis ist, verwenden Sie den Pfad zu diesem Verzeichnis, ohne einen nachfolgenden umgekehrten Schrägstrich. Beispielsweise gibt ein Argument von "C:\Windows" Informationen über das Verzeichnis "C:\Windows" zurück, nicht über ein Verzeichnis oder eine Datei in "C:\Windows". Um die Dateien und Verzeichnisse in "C:\Windows" zu untersuchen, verwenden Sie einen lpFileName von "C:\Windows\*".

Beachten Sie, dass ein anderer Thread oder Prozess zwischen dem Zeitpunkt, zu dem Sie das Ergebnis abfragen, und dem Zeitpunkt, zu dem Sie auf die Informationen reagieren, eine Datei mit diesem Namen erstellen oder löschen kann. Wenn dies ein potenzielles Problem für Ihre Anwendung ist, besteht eine mögliche Lösung darin, die CreateFile-Funktion mit CREATE_NEW (die fehlschlägt, wenn die Datei vorhanden ist) oder OPEN_EXISTING (was fehlschlägt, wenn die Datei nicht vorhanden ist).

Wenn Sie eine 32-Bit-Anwendung schreiben, um alle Dateien in einem Verzeichnis aufzulisten und die Anwendung möglicherweise auf einem 64-Bit-Computer ausgeführt wird, sollten Sie die Wow64DisableWow64FsRedirection-Funktion aufrufen, bevor Sie FindFirstFile aufrufen und wow64RevertWow64FsRedirection nach dem letzten Aufruf von FindNextFile aufrufen. Weitere Informationen finden Sie unter Dateisystemumleitung.

Wenn der Pfad auf einen symbolischen Link zeigt, enthält der Puffer WIN32_FIND_DATA Informationen zum symbolischen Link, nicht das Ziel.

Unter Windows 8 und Windows Server 2012 wird diese Funktion von den folgenden Technologien unterstützt.

Technologie Unterstützt
SMB 3.0-Protokoll (Server Message Block) Ja
SMB 3.0 Transparent Failover (TFO) Ja
SMB 3.0 mit Dateifreigaben mit horizontaler Skalierung (SO) Ja
Dateisystem mit freigegebenen Clustervolumes (CsvFS) Ja
Robustes Dateisystem (Resilient File System, ReFS) Ja
 

Beispiele

Das folgende C++-Beispiel zeigt eine minimale Verwendung von FindFirstFile.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

void _tmain(int argc, TCHAR *argv[])
{
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind;

   if( argc != 2 )
   {
      _tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
      return;
   }

   _tprintf (TEXT("Target file is %s\n"), argv[1]);
   hFind = FindFirstFile(argv[1], &FindFileData);
   if (hFind == INVALID_HANDLE_VALUE) 
   {
      printf ("FindFirstFile failed (%d)\n", GetLastError());
      return;
   } 
   else 
   {
      _tprintf (TEXT("The first file found is %s\n"), 
                FindFileData.cFileName);
      FindClose(hFind);
   }
}

Ein weiteres Beispiel finden Sie unter Auflisten der Dateien in einem Verzeichnis.

Hinweis

Der fileapi.h-Header definiert FindFirstFile als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile fileapi.h (Einschließen von Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

Dateiverwaltungsfunktionen

FindClose

FindFirstFileEx

FindFirstFileTransacted

FindNextFile

GetFileAttributes

SetFileAttributes

Symbolische Links

Verwenden der Windows-Header

WIN32_FIND_DATA