Wie kann ich mit C# alle Dateien und Ordner aus einem Verzeichnis löschen, aber das Root-Verzeichnis beibehalten?
C l
Wie kann ich mit C# alle Dateien und Ordner aus einem Verzeichnis löschen, aber das Root-Verzeichnis beibehalten?
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()
.
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();
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();
}
}
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.
0 Stimmen
s