Fehlerbehebung beim rekursiven Löschen von Verzeichnissen in .NET 3.5
Der häufige Fehler „System.IO.IOException: Das Verzeichnis ist nicht leer“ bei der Verwendung von Directory.Delete(path, true)
in .NET 3.5 ist irreführend. Der Parameter true
gibt rekursives Löschen an, verarbeitet Dateien innerhalb des Verzeichnisses jedoch nicht automatisch.
Um ein Verzeichnis und seinen Inhalt zuverlässig rekursiv zu löschen, ist eine benutzerdefinierte Funktion erforderlich:
<code class="language-csharp">public static void DeleteDirectoryRecursively(string targetDir) { string[] files = Directory.GetFiles(targetDir); string[] dirs = Directory.GetDirectories(targetDir); foreach (string file in files) { File.SetAttributes(file, FileAttributes.Normal); // Remove read-only attributes File.Delete(file); } foreach (string dir in dirs) { DeleteDirectoryRecursively(dir); // Recursive call for subdirectories } Directory.Delete(targetDir, false); // Delete the directory itself }</code>
Diese verbesserte Methode entfernt zunächst alle schreibgeschützten Attribute aus Dateien und löscht dann jede Datei einzeln. Es ruft sich selbst rekursiv auf, um verschachtelte Unterverzeichnisse zu verarbeiten, bevor es schließlich das Zielverzeichnis löscht. Dadurch ist eine vollständige und fehlerfreie Entfernung gewährleistet. Es wird empfohlen, Zugriffsbeschränkungen einzuführen, um ein versehentliches Löschen systemgeschützter Ordner zu verhindern.
Das obige ist der detaillierte Inhalt vonWarum schlägt Directory.Delete(path, true) fehl und wie kann ich ein Verzeichnis in .NET 3.5 rekursiv löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!