880 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

1145voto

gsharp Punkte 25855
System.IO.DirectoryInfo di = new DirectoryInfo("YourPath");

foreach (FileInfo file in di.GetFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.GetDirectories())
{
    dir.Delete(true); 
}

Wenn Ihr Verzeichnis viele Dateien enthält, EnumerateFiles() ist effizienter als GetFiles() , denn wenn Sie EnumerateFiles() können Sie mit der Aufzählung beginnen, bevor die gesamte Sammlung zurückgegeben wird, im Gegensatz zu GetFiles() wo Sie die gesamte Sammlung in den Speicher laden müssen, bevor Sie mit der Aufzählung beginnen. Siehe dieses Zitat aquí :

Wenn Sie also mit vielen Dateien und Verzeichnissen arbeiten, kann EnumerateFiles() effizienter sein.

Das Gleiche gilt für EnumerateDirectories() y GetDirectories() . Der Code würde also lauten:

foreach (FileInfo file in di.EnumerateFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.EnumerateDirectories())
{
    dir.Delete(true); 
}

Für die Zwecke dieser Frage gibt es keinen Grund, die GetFiles() y GetDirectories() .

7 Stimmen

C l

8 Stimmen

@

207voto

Adam Robinson Punkte 176996

Ja, das ist die richtige Vorgehensweise. Wenn Sie sich selbst eine "saubere" (oder, wie ich es lieber nennen würde, "leere") Funktion geben wollen, können Sie eine Erweiterungsmethode erstellen.

public static void Empty(this System.IO.DirectoryInfo directory)
{
    foreach(System.IO.FileInfo file in directory.GetFiles()) file.Delete();
    foreach(System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);
}

Damit können Sie dann etwas tun wie.

System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(@"C:\...");

directory.Empty();

0 Stimmen

V

86voto

hiteshbiblog Punkte 831

Mit dem folgenden Code wird der Ordner rekursiv gelöscht:

private void clearFolder(string FolderName)
{
    DirectoryInfo dir = new DirectoryInfo(FolderName);

    foreach(FileInfo fi in dir.GetFiles())
    {
        fi.Delete();
    }

    foreach (DirectoryInfo di in dir.GetDirectories())
    {
        clearFolder(di.FullName);
        di.Delete();
    }
}

84voto

Igor Mukhachev Punkte 752

Der einfachste Weg:

Directory.Delete(path,true);  
Directory.CreateDirectory(path);

Beachten Sie, dass dadurch möglicherweise einige Berechtigungen für den Ordner gelöscht werden.

46voto

Thulasiram Punkte 8220
 new System.IO.DirectoryInfo(@"C:\Temp").Delete(true);

 //Or

 System.IO.Directory.Delete(@"C:\Temp", true);

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