882 Stimmen

Wie lösche ich alle Dateien und Ordner in einem Verzeichnis?

Wie kann ich mit C# alle Dateien und Ordner aus einem Verzeichnis löschen, aber das Root-Verzeichnis beibehalten?

0 Stimmen

s

8voto

Piet du Preez Punkte 49

Ich weiß, dass dies eine uralte Frage ist, aber dies ist die (vielleicht neue) richtige Antwort:

new DirectoryInfo(folder).Delete(true);
Directory.CreateDirectory(folder);

Löscht alle rekursiven Dateien und erstellt dann den Ordner neu.

PS - Muss eine Referenz haben using System.IO;

4 Stimmen

T

8voto

Alexandru Dicu Punkte 972

Jede Methode, die ich versucht habe, ist irgendwann mit System.IO-Fehlern fehlgeschlagen. Die folgende Methode funktioniert mit Sicherheit, auch wenn der Ordner leer ist oder nicht, schreibgeschützt oder nicht, etc.

ProcessStartInfo Info = new ProcessStartInfo();  
Info.Arguments = "/C rd /s /q \"C:\\MyFolder"";  
Info.WindowStyle = ProcessWindowStyle.Hidden;  
Info.CreateNoWindow = true;  
Info.FileName = "cmd.exe";  
Process.Start(Info);

7voto

AVH Punkte 1645
string directoryPath = "C:\Temp";
Directory.GetFiles(directoryPath).ToList().ForEach(File.Delete);
Directory.GetDirectories(directoryPath).ToList().ForEach(Directory.Delete);

7voto

Kriil Punkte 528

Die Verwendung von statischen Methoden mit File und Directory anstelle von FileInfo und DirectoryInfo wird schneller sein. (siehe akzeptierte Antwort unter Was ist der Unterschied zwischen File und FileInfo in C#? ). Die Antwort wird als Dienstprogramm angezeigt.

public static void Empty(string directory)
{
    foreach(string fileToDelete in System.IO.Directory.GetFiles(directory))
    {
        System.IO.File.Delete(fileToDelete);
    }
    foreach(string subDirectoryToDeleteToDelete in System.IO.Directory.GetDirectories(directory))
    {
        System.IO.Directory.Delete(subDirectoryToDeleteToDelete, true);
    }
}

6voto

hofi Punkte 101

Der folgende Code bereinigt das Verzeichnis, lässt aber das Root-Verzeichnis dort (rekursiv).

Action<string> DelPath = null;
DelPath = p =>
{
    Directory.EnumerateFiles(p).ToList().ForEach(File.Delete);
    Directory.EnumerateDirectories(p).ToList().ForEach(DelPath);
    Directory.EnumerateDirectories(p).ToList().ForEach(Directory.Delete);
};
DelPath(path);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X