DeleteFileTransactedA-Funktion (winbase.h)

[Microsoft empfiehlt Entwicklern dringend, alternative Mittel zu verwenden, um die Anforderungen Ihrer Anwendung zu erfüllen. Viele Szenarios, für die TxF entwickelt wurde, können mit einfacheren und leichter verfügbaren Techniken erreicht werden. Darüber hinaus ist TxF in zukünftigen Versionen von Microsoft Windows möglicherweise nicht verfügbar. Weitere Informationen und Alternativen zu TxF finden Sie unter Alternativen zur Verwendung von transaktionalem NTFS.]

Löscht eine vorhandene Datei als Transaktionsvorgang.

Syntax

BOOL DeleteFileTransactedA(
  [in] LPCSTR lpFileName,
  [in] HANDLE hTransaction
);

Parameter

[in] lpFileName

Der Name der zu löschenden Datei.

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 .

Die Datei muss sich auf dem lokalen Computer befinden. andernfalls schlägt die Funktion fehl, und der letzte Fehlercode wird auf ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE festgelegt.

[in] hTransaction

Ein Handle für die Transaktion. Dieses Handle wird von der CreateTransaction-Funktion zurückgegeben.

Rückgabewert

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

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert 0 (null). Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Wenn eine Anwendung versucht, eine datei zu löschen, die nicht vorhanden ist, schlägt die DeleteFileTransacted-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.

Die folgende Liste enthält einige Tipps zum Löschen, Entfernen oder Schließen von Dateien:

  • 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 Löschberechtigung für die Datei oder über eine untergeordnete Berechtigung im übergeordneten Verzeichnis verfügen.
  • Um die Dateien in einem Verzeichnis rekursiv zu löschen, verwenden Sie die SHFileOperation-Funktion .
  • Um ein leeres Verzeichnis zu entfernen, verwenden Sie die Funktion RemoveDirectoryTransacted .
  • Um eine geöffnete Datei zu schließen, verwenden Sie die CloseHandle-Funktion .
Wenn Sie ein Verzeichnis mit allen Zugriffen mit Ausnahme des untergeordneten Löschens und Löschens einrichten und die Zugriffssteuerungslisten (Access Control Lists, ACL) neuer Dateien geerbt werden, können Sie eine Datei erstellen, ohne sie löschen zu können. Dann können Sie jedoch eine Datei erstellen und dann den gesamten Zugriff erhalten, den Sie auf das Handle anfordern, das Ihnen zum Zeitpunkt der Erstellung der Datei zurückgegeben wird.

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

Die DeleteFileTransacted-Funktion schlägt fehl, wenn eine Anwendung versucht, eine Datei zu löschen, die andere Handles für normale E/A-Vorgänge oder als Speicherzuordnungsdatei geöffnet hat (FILE_SHARE_DELETE muss angegeben worden sein, wenn andere Handles geöffnet wurden).

Die DeleteFileTransacted-Funktion markiert eine Datei zum Löschen beim Schließen. Die Datei wird gelöscht, nachdem das zuletzt abgewickelte Writerhandle für die Datei geschlossen wurde, vorausgesetzt, die Transaktion ist weiterhin aktiv. Wenn eine Datei zum Löschen markiert wurde und ein Transacted Writer-Handle nach Abschluss der Transaktion weiterhin geöffnet ist, wird die Datei nicht gelöscht.

Symbolische Links: Wenn der Pfad auf einen symbolischen Link verweist, wird der symbolische Link gelöscht, nicht das Ziel. Um ein Ziel zu löschen, müssen Sie CreateFile aufrufen und FILE_FLAG_DELETE_ON_CLOSE angeben.

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) No
SMB 3.0 Transparent Failover (TFO) No
SMB 3.0 mit Dateifreigaben mit horizontaler Skalierung (SO) No
Dateisystem mit freigegebenen Clustervolumes (CsvFS) No
Robustes Dateisystem (Resilient File System, ReFS) No
 

SMB 3.0 unterstützt TxF nicht.

Hinweis

Der winbase.h-Header definiert DeleteFileTransacted 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 Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winbase.h (einschließlich Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CloseHandle

CreateFileTransacted

Dateiverwaltungsfunktionen

Symbolische Links

Transaktions-NTFS