Freigeben über


Sie können eine Datei oder einen Ordner auf einem NTFS-Dateisystemvolume nicht löschen.

In diesem Artikel wird beschrieben, warum eine Datei oder ein Ordner auf einem NTFS-Dateisystemvolume nicht gelöscht werden kann. Es bietet auch Hilfe zur Lösung dieses Problems.

Ursprüngliche KB-Nummer: 320081

Notiz

Intern behandelt NTFS Ordner als einen speziellen Dateityp. Daher gibt die Wortdatei in diesem Artikel entweder eine Datei oder einen Ordner an.

Ursache 1: Die Datei verwendet eine ACL

Sie können eine Datei nicht löschen, wenn die Datei eine Zugriffssteuerungsliste (Access Control List, ACL) verwendet. Um dieses Problem zu beheben, ändern Sie die Berechtigungen für die Datei. Möglicherweise müssen Sie den Besitz der Dateien übernehmen, um die Berechtigungen zu ändern.

Administratoren haben die implizite Möglichkeit, den Besitz einer Datei zu übernehmen, auch wenn ihnen keine explizite Berechtigung für die Datei erteilt wurde. Dateibesitzer haben die implizite Möglichkeit, Dateiberechtigungen zu ändern, auch wenn ihnen keine expliziten Berechtigungen für die Datei erteilt werden. Sie müssen also möglicherweise den Besitz einer Datei übernehmen, sich die Berechtigung zum Löschen der Datei erteilen und dann die Datei löschen.

Sie können bestimmte Sicherheitstools nicht verwenden, um Berechtigungen anzuzeigen oder zu ändern, da die Datei über eine nicht kanonische ACL verfügt.

Um dieses Problem zu umgehen, verwenden Sie ein anderes Tool (z. B. einen späteren Build von Cacls.exe).

Die Zugriffssteuerungseinträge (Access Control Entries, ACEs) in einer ACL weisen je nach Typ eine bestimmte bevorzugte Sequenz auf. AcEs, die den Zugriff verweigern, kommen in der Regel vor ACEs, die Zugriff gewähren. Allerdings verhindert nichts, dass ein Programm eine ACL mit ACEs in beliebiger Reihenfolge schreibt. In einigen früheren Versionen von Windows sind Probleme aufgetreten, wenn Windows versucht hat, diese nicht kanonischen ACLs zu lesen. Manchmal können Sie diese ACLs nicht ordnungsgemäß ändern, indem Sie den grafischen Sicherheits-Editor von Microsoft Windows Explorer verwenden. Dieses Problem wurde in späteren Versionen von Windows behoben. Wenn dieses Problem aufgetreten ist, verwenden Sie die neueste Version von Cacls.exe. Auch wenn Sie eine ACL nicht anzeigen oder bearbeiten können, können Sie eine neue ACL schreiben, um Zugriff auf die Datei zu erhalten.

Ursache 2: Die Datei wird verwendet

Sie können eine Datei nicht löschen, wenn die Datei verwendet wird. Um dieses Problem zu beheben, bestimmen Sie den Prozess mit dem geöffneten Handle, und schließen Sie diesen Vorgang.

Je nachdem, wie die Datei geöffnet wird, können Sie möglicherweise keine verwendete Datei löschen. Die Datei ist z. B. für exklusiven Zugriff und nicht für den freigegebenen Zugriff geöffnet. Sie können verschiedene Tools verwenden, um die Prozesse zu bestimmen, die geöffnete Handles für Dateien haben, wann immer Sie möchten.

Die Symptome dieses Problems können variieren. Sie können den Befehl "Löschen" verwenden, um eine Datei zu löschen. Die Datei wird jedoch erst gelöscht, wenn der Prozess, bei dem die Datei geöffnet ist, die Datei freigegeben hat. Darüber hinaus können Sie möglicherweise nicht auf das Dialogfeld "Sicherheit" für eine Datei zugreifen, die aussteht. Um dieses Problem zu beheben, bestimmen Sie den Prozess mit dem geöffneten Handle, und schließen Sie diesen Vorgang.

Ursache 3: Dateisystembeschädigung verhindert den Zugriff auf die Datei

Sie können die Datei nicht löschen, wenn das Dateisystem beschädigt ist. Um dieses Problem zu beheben, führen Sie das Hilfsprogramm Chkdsk auf dem Datenträgervolume aus, um fehler zu beheben.

Die folgenden Gründe können das Dateisystem beschädigen und Dateien in einen problematischen Zustand versetzen:

  • Ungültige Sektoren auf dem Datenträger
  • Sonstige fehlerhafte Hardware
  • Softwarefehler

Typische Vorgänge können auf verschiedene Arten fehlschlagen. Wenn das Dateisystem Beschädigungen erkennt, protokolliert es ein Ereignis im Ereignisprotokoll und Sie erhalten in der Regel eine Meldung, die Sie auffordert, Chkdsk auszuführen. Je nach Art der Beschädigung kann Chkdsk Dateidaten wiederherstellen. Chkdsk gibt das Dateisystem jedoch in einen intern konsistenten Zustand zurück.

Ursache 4: Dateien sind in Pfaden vorhanden, die tiefer als MAX_PATH Zeichen sind

Sie können eine Datei nicht öffnen, bearbeiten oder löschen, wenn Probleme mit dem Dateipfad auftreten.

Auflösung 1: Verwenden eines automatisch generierten 8.3-Namens für den Zugriff auf die Datei

Um dieses Problem zu beheben, möchten Sie möglicherweise den automatisch generierten 8.3-Namen verwenden, um auf die Datei zuzugreifen. Diese Auflösung kann die einfachste Lösung sein, wenn der Pfad tief ist, da die Ordnernamen zu lang sind. Wenn der 8.3-Pfad ebenfalls zu lang ist oder 8.3-Namen auf dem Volume deaktiviert wurden, wechseln Sie zu Auflösung 2. Weitere Informationen zum Deaktivieren von 8.3-Dateinamen auf NTFS-Volumes finden Sie unter Deaktivieren der 8.3-Namenserstellung auf NTFS-Partitionen.

Lösung 2: Umbenennen oder Verschieben eines tiefen Ordners

Benennen Sie den Ordner um, sodass die Zieldateien, die tiefer als die MAX_PATH nicht mehr vorhanden sind, tiefer sind. Wenn Sie dies tun, beginnen Sie im Stammordner oder an einem anderen praktischen Ort. Benennen Sie dann Ordner um, sodass sie kürzere Namen haben. Wenn dieses Problem in diesem Schritt nicht behoben wird, z. B. wenn eine Datei mehr als 128 Ordner tief ist, wechseln Sie zu Lösung 4.

Auflösung 3: Zuordnen eines Laufwerks zu einem Ordner in der Struktur des Pfads

Ordnen Sie ein Laufwerk einem Ordner innerhalb der Struktur des Pfads der Zieldatei oder des Zielordners zu. Diese Methode verkürzt den virtuellen Pfad.

Angenommen, Sie haben einen Pfad, der wie folgt strukturiert ist:

\\ServerName\SubfolderName1\SubfolderName2\SubfolderName3\SubfolderName4\...

In diesem Pfad beträgt die Gesamtzeichenanzahl mehr als 255 Zeichen. Um die Länge dieses Pfads auf 73 Zeichen zu kürzen, ordnen Sie ein Laufwerk dem UnterordnerName4 zu.

Auflösung 4: Verwenden einer Netzwerkfreigabe, die so tief wie der Ordner ist

Wenn die Auflösungen 1, 2 und 3 nicht praktisch sind oder das Problem nicht beheben, erstellen Sie eine Netzwerkfreigabe, die so tief in der Ordnerstruktur liegt wie möglich. Benennen Sie dann die Ordner um, indem Sie auf die Freigabe zugreifen.

Auflösung 5: Verwenden eines Tools, das tiefe Pfade durchlaufen kann

Viele Windows-Programme erwarten, dass die maximale Pfadlänge kürzer als 255 Zeichen ist. Diese Programme weisen nur genügend internen Speicher zu, um diese typischen Pfade zu verarbeiten. NTFS hat diesen Grenzwert nicht, und er kann viel längere Pfade enthalten.

Dieses Problem kann auftreten, wenn Sie irgendwann eine Freigabe in Ihrer Ordnerstruktur erstellen, die bereits relativ tief ist, und dann eine tiefe Struktur unterhalb dieses Punkts erstellen, indem Sie die Freigabe verwenden. Einige Tools, die lokal auf der Ordnerstruktur ausgeführt werden, können möglicherweise nicht die gesamte Struktur ab dem Stamm durchlaufen. Möglicherweise müssen Sie diese Tools auf besondere Weise verwenden, damit sie die Freigabe durchlaufen können. In der CreateFile-API-Dokumentation wird eine Methode zum Durchlaufen der gesamten Struktur in dieser Situation beschrieben.

In der Regel können Sie Dateien mithilfe der Software verwalten, die sie erstellt. Wenn Sie über ein Programm verfügen, das Dateien erstellen kann, die tiefer als MAX_PATHsind, können Sie in der Regel dasselbe Programm verwenden, um die Dateien zu löschen oder zu verwalten. In der Regel können Sie Dateien löschen, die auf einer Freigabe erstellt werden, indem Sie dieselbe Freigabe verwenden.

Ursache 5: Der Dateiname enthält einen reservierten Namen im Win32-Namensraum.

Wenn der Dateiname einen reservierten Namen im Win32-Namensraum enthält, z. B. lpt1, können Sie die Datei nicht löschen. Verwenden Sie zum Beheben dieses Problems ein Nicht-Win32-Programm, um die Datei umzubenennen. Sie können ein POSIX-Tool oder ein beliebiges anderes Tool verwenden, das die entsprechende interne Syntax verwendet, um die Datei zu verwenden.

Darüber hinaus können Sie einige integrierte Befehle verwenden, um die typischen reservierten Win32-Namensprüfungen zu umgehen, wenn Sie eine bestimmte Syntax verwenden, um den Pfad der Datei anzugeben.

Wenn Sie ein Handle für eine Datei mithilfe des typischen Win32 CreateFile-Mechanismus öffnen, sind bestimmte Dateinamen für DOS-Geräte im alten Stil reserviert. Aus Gründen der Abwärtskompatibilität sind diese Dateinamen nicht zulässig und können nicht mit typischen Win32-Dateiaufrufen erstellt werden. Dieses Problem ist keine Einschränkung von NTFS.

Sie können ein Win32-Programm verwenden, um die typischen Namensprüfungen zu umgehen, die durchgeführt werden, wenn eine Datei erstellt oder gelöscht wird, indem Sie dieselbe Technik verwenden, mit der Sie Ordner tiefer durchlaufen als MAX_PATH. Darüber hinaus unterliegen einige POSIX-Tools diesen Namensüberprüfungen nicht.

Ursache 6: Der Dateiname enthält einen ungültigen Namen im Win32-Namensraum.

Sie können eine Datei nicht löschen, wenn der Dateiname einen ungültigen Namen enthält. Beispielsweise weist der Dateiname ein nachgestelltes Leerzeichen oder einen nachgestellten Punkt auf, oder der Dateiname besteht nur aus einem Leerzeichen. Verwenden Sie zum Beheben dieses Problems ein Tool, das die entsprechende interne Syntax verwendet, um die Datei zu löschen. Sie können die "\\?\" Syntax mit einigen Tools verwenden, um diese Dateien zu verwenden. Hier sehen Sie ein Beispiel:

del "\\?\c:\<path_to_file_that contains a trailing space.txt>"

Die Ursache dieses Problems ist der Ursache 4 ähnlich. Wenn Sie die typische Win32-Syntax verwenden, um eine Datei zu öffnen, die nachfolgende Leerzeichen oder nachfolgende Punkte im Namen enthält, werden die nachfolgenden Leerzeichen oder Punkte entfernt, bevor die eigentliche Datei geöffnet wird. Sie haben z. B. zwei Dateien im selben Ordner namens AFile.txt , und AFile.txt notieren Sie sich das Leerzeichen nach dem Dateinamen. Wenn Sie versuchen, die zweite Datei mit standardmäßigen Win32-Aufrufen zu öffnen, öffnen Sie stattdessen die erste Datei. Wenn Sie über eine Datei verfügen, deren Name nur ein Leerzeichen ist und Sie versuchen, sie mit standardmäßigen Win32-Aufrufen zu öffnen, öffnen Sie stattdessen den übergeordneten Ordner der Datei. Wenn Sie in diesem Fall versuchen, Sicherheitseinstellungen für diese Dateien zu ändern, sind Sie möglicherweise nicht in der Lage, dies zu tun, oder Sie können die Einstellungen in verschiedenen Dateien unerwartet ändern. Wenn dieses Verhalten auftritt, denken Sie möglicherweise, dass Sie über die Berechtigung für eine Datei verfügen, die tatsächlich über eine restriktive ACL verfügt.

Kombinationen von Ursachen

Manchmal können Kombinationen dieser Ursachen auftreten. Es kann dazu führen, dass die Prozedur eine Datei komplexer löscht. Wenn Sie sich beispielsweise als Administrator des Computers anmelden, können Sie eine Kombination aus Ursache 1 (Sie verfügen nicht über berechtigungen zum Löschen einer Datei) und Ursache 5 (der Dateiname enthält ein nachfolgendes Zeichen, das bewirkt, dass der Dateizugriff auf eine andere oder nicht vorhandene Datei umgeleitet wird), und Sie können die Datei nicht löschen. Wenn Sie versuchen, Ursache 1 zu beheben, indem Sie die Besitzer der Datei übernehmen und Berechtigungen hinzufügen, können Sie die Datei möglicherweise nicht löschen, da der ACL-Editor auf der Benutzeroberfläche aufgrund von Ursache 6 nicht auf die entsprechende Datei zugreifen kann.

In diesem Fall können Sie das Hilfsprogramm "Subinacl" mit dem /onlyfile Switch (dieses Hilfsprogramm ist im Resource Kit enthalten) verwenden, um den Besitz und die Berechtigungen für eine Datei zu ändern, auf die andernfalls nicht zugegriffen werden kann. Hier sehen Sie ein Beispiel:

subinacl /onlyfile "\\?\c:\<path_to_problem_file>" /setowner= domain\administrator /grant= domain\administrator=F

Notiz

Dieser Befehl ist eine einzelne Befehlszeile, die zur Besseren Lesbarkeit umschlossen wurde.

In dieser Beispiel-Befehlszeile wird die Datei geändert, die C:\<path_to_problem_file> ein nachfolgendes Leerzeichen enthält, sodass das Domänen-\Administratorkonto der Besitzer der Datei ist und dieses Konto die vollständige Kontrolle über die Datei hat. Sie können diese Datei jetzt mithilfe des Befehls "Entf" mit derselben "\\?\" Syntax löschen.