Sie wissen, dass es unter Linux einfach ist, aber ich kann nicht einfach verstehen, wie es in C # unter Windows geht. Ich möchte alle Dateien löschen, die dem Platzhalter entsprechen f*.txt
. Wie gehe ich vor?
73
Sie können die DirectoryInfo.EnumerateFiles
Funktion verwenden :
var dir = new DirectoryInfo(directoryPath);
foreach (var file in dir.EnumerateFiles("f*.txt")) {
file.Delete();
}
(Natürlich möchten Sie wahrscheinlich die Fehlerbehandlung hinzufügen.)
dir.EnumerateFiles("f*.txt").ToList().ForEach(f => f.Delete());
EnumerateFiles
überGetFiles
.Ich weiß, dass dies bereits beantwortet wurde und mit einer guten Antwort, aber es gibt eine Alternative in .NET 4.0 und höher . Verwenden Sie
Directory.EnumerateFiles()
also:foreach (string f in Directory.EnumerateFiles(myDirectory,"f*.txt")) { File.Delete(f); }
Der Nachteil von
DirectoryInfo.GetFiles()
ist, dass es eine Liste von Dateien zurückgibt - was in 99,9% der Fälle großartig ist. Der Nachteil ist, wenn der Ordner Zehntausende von Dateien enthält (was selten vorkommt), wird er sehr langsam und das Auflisten durch die übereinstimmenden Dateien ist viel schneller.quelle
DirectoryInfo
hatEnumerateFiles()
auch.DirectoryInfo.GetFiles()
(was die ursprüngliche Antwort war) ist die einzige Möglichkeit, dies für frühere Versionen von .NET zu tun.Sie können die Directory.GetFiles- Methode mit der Platzhalterüberladung verwenden. Dadurch werden alle Dateinamen zurückgegeben, die Ihrem Muster entsprechen. Sie können diese Dateien dann löschen.
quelle
Ich schätze, dass dieser Thread jetzt ein bisschen alt ist, aber wenn Sie dann linq verwenden möchten
Directory.GetFiles("f:\\TestData", "*.zip", SearchOption.TopDirectoryOnly).ToList().ForEach(File.Delete);
quelle