Freigeben über


DeleteFile2A-Funktion (fileapi.h)

Löscht eine vorhandene Datei. Diese Funktion schlägt fehl, wenn ein Teil von lpFileName über einen Analysepunkt oder eine symbolische Verknüpfung umgeleitet wird.

Verwenden Sie die DeleteFileTransacted-Funktion , um diesen Vorgang als transacted-Vorgang auszuführen.

Syntax

BOOL DeleteFile2A(
  LPCSTR lpFileName,
  DWORD  Flags
);

Die Parameter

lpFileName

Der Name der zu löschenden Datei.

Standardmäßig ist der Name auf MAX_PATH Zeichen beschränkt. Um diesen Grenzwert auf 32.767 breite Zeichen zu erweitern, stellen Sie "\\?\" dem Pfad voran. Weitere Informationen finden Sie unter Benennen von Dateien, Pfaden und Namespaces.

Tipp

Sie können sich anmelden, um die MAX_PATH Einschränkung zu entfernen , ohne "\\?\" vorauszustehen. Weitere Informationen finden Sie im Abschnitt "Maximale Pfadlängenbeschränkung" der Benennungsdateien, Pfade und Namespaces .

Flags

Flags to specify how to treat the file that is being deleted. Dieser Parameter kann eine Kombination aus einem der folgenden Werte sein:

Wert Bedeutung
FILE_FLAGS_DISALLOW_PATH_REDIRECTS
0x00000001
Verhindern Sie , dass lpFileName durch Analysepunkte oder symbolische Verknüpfungen umgeleitet wird.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlschlägt, ist der Rückgabewert null (0). Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten. Mögliche Fehler sind:

Rückgabecode BESCHREIBUNG
ERROR_PATH_REDIRECTED lpFileName wurde durch Analysepunkte und/oder symbolische Verknüpfungen umgeleitet.

Bemerkungen

Wenn eine Anwendung versucht, eine datei zu löschen, die nicht vorhanden ist, schlägt die DeleteFile2-Funktion mit ERROR_FILE_NOT_FOUND fehl. Wenn es sich bei der Datei um eine schreibgeschützte Datei handelt, schlägt die Funktion mit ERROR_ACCESS_DENIED fehl.

In der folgenden Liste werden einige Tipps zum Löschen, Entfernen oder Schließen von Dateien aufgeführt:

  • Um eine schreibgeschützte Datei zu löschen, müssen Sie zuerst das schreibgeschützte Attribut entfernen.
  • Um eine Datei zu löschen oder umzubenennen, müssen Sie entweder über die Berechtigung zum Löschen der Datei oder über die Berechtigung zum Löschen untergeordneter Elemente im übergeordneten Verzeichnis verfügen.
  • Verwenden Sie die SHFileOperation-Funktion , um die Dateien in einem Verzeichnis rekursiv zu löschen.
  • Verwenden Sie die RemoveDirectory-Funktion , um ein leeres Verzeichnis zu entfernen.
  • Verwenden Sie die CloseHandle-Funktion , um eine geöffnete Datei zu schließen.

Wenn Sie ein Verzeichnis mit allen Zugriffen einrichten, mit Ausnahme des Löschens und Löschens untergeordneter Elemente, und die Zugriffssteuerungslisten (Access Control Lists, ACL) neuer Dateien geerbt werden, können Sie eine Datei erstellen, ohne sie löschen zu können. Anschließend können Sie jedoch eine Datei erstellen und dann den gesamten Zugriff erhalten, den Sie für das Handle anfordern, das sie zum Zeitpunkt der Erstellung der Datei an Sie zurückgibt.

Wenn Sie zum Zeitpunkt der Erstellung einer Datei die Löschberechtigung anfordern, können Sie die Datei mit diesem Handle löschen oder umbenennen, jedoch nicht mit einem anderen Handle. Weitere Informationen finden Sie unter "Dateisicherheit und Zugriffsrechte".

Die DeleteFile2-Funktion schlägt fehl, wenn eine Anwendung versucht, eine Datei zu löschen, die andere Handles für normale E/A oder als speicherzuordnunge Datei geöffnet hat (FILE_SHARE_DELETE müssen angegeben werden, wenn andere Handles geöffnet wurden).

Die DeleteFile2-Funktion markiert eine Datei zum Löschen beim Schließen. Daher tritt das Löschen der Datei erst auf, wenn das letzte Handle für die Datei geschlossen wird. Nachfolgende Aufrufe von CreateFile, CreateFile2 oder CreateFile3 zum Öffnen der Datei schlagen mit ERROR_ACCESS_DENIED fehl.

Die Verwendung des POSIX-Löschvorgangs bewirkt, dass die Datei gelöscht wird, während Handles geöffnet bleiben. Nachfolgende Aufrufe von CreateFile zum Öffnen der Datei schlagen mit ERROR_FILE_NOT_FOUND fehl.

Wenn der Pfad auf eine symbolische Verknüpfung zeigt, wird die symbolische Verknüpfung gelöscht, nicht das Ziel. Zum Löschen eines Ziels müssen Sie CreateFile aufrufen und FILE_FLAG_DELETE_ON_CLOSE angeben.

Diese Funktion wird von den folgenden Technologien unterstützt:

Technologie Unterstützt
Server Message Block (SMB) 3.0-Protokoll Ja
SMB 3.0 Transparent Failover (TFO) Ja
SMB 3.0 mit Skalierungsdateifreigaben (SO) Ja
Freigegebenes Clustervolumedateisystem (CsvFS) Ja
Resilient File System (ReFS) Ja

Hinweis

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

Beispiele

Ein Beispiel finden Sie unter Sperren und Entsperren von Bytebereichen in Dateien.

Anforderungen

Anforderung Wert
Unterstützter Client (Mindestversion) Windows 11 24H2 [Desktop-Apps | UWP-Apps]
mindestens unterstützte Server- Windows Server 2025 [Desktop-Apps | UWP-Apps]
Kopfzeile fileapi.h (include Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CreateDirectory2

CreateFile3

RemoveDirectory2