C# - Dateien löschen, die im Ordner mit filter
Bin ich mit SharpDevelop schreiben Sie ein C# - Programm (nicht die Konsole).
Ich will das löschen von Dateien in einem angegebenen Verzeichnis, sondern in der Lage sein, um Dateien AUSSCHLIEßEN, Anfang, Ende, oder die bestimmte Wörter.
Komplett löschen ALLE Dateien in einem Ordner, ich verwende diese :
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();
}
}
Ich benutze es wie
ClearFolder("NameOfFolderIWantToEmpty");
Gibt es eine Möglichkeit, dies zu ändern, so dass ich alle Dateien löschen und direcotries AUßER diese Dateien und Verzeichnisse mit bestimmten Wörtern?
Etwas wie :
CleanFolder(FolderToEmpty,ExcludeAllFileAndDirectoriesContaingThisPhrase);
so, dass wenn ich
CleanFolder("MyTestFolder","_blink");
Wäre es NICHT löschen Dateien und Verzeichnisse mit Namen wie
_blinkOne (file)
Test_blineGreen (file)
Test_blink5 (directory)
_blinkTwo (file within the Text_blink5 directory)
Folder_blink (empty directory)
aber WÜRDE das löschen von Dateien und Verzeichnissen wie
test (file)
test2 (directory)
test3_file (file within test2 directory)
test4 (empty directory)
Ich vermute, ich hätte zu Durchlaufen jeder Datei und jedem Verzeichnis ist, überprüfen Sie Sie ein zu einer Zeit, für die passenden filter und löschen Sie es, wenn es nicht passt, aber ich bin nicht sicher, wie das zu tun.
Etwas mit FileInfo()
und DirectoryInfo()
vielleicht?
Kann jemand helfen, indem Sie ein funktionierendes Beispiel?
(modifizierte version der oben genannten ist am günstigsten, aber wenn eine neue Methode erforderlich ist, solange es nicht erforderlich ist, eine außerhalb dll, ist OK.
möglich, Duplikat der C# - Löschen von Dateien aus dem Verzeichnis, wenn der Dateiname enthält ein bestimmtes Wort
InformationsquelleAutor CopalFreak | 2013-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
- Verzeichnis.GetFiles(string, string)
Methode, um eine Liste der Dateien, die match deine Muster, und verwenden SieEnumerable.Except(IEnumerable<T>)
um die Dateien, die Sie tatsächlich löschen möchten.Gibt es keine Notwendigkeit zu verwenden DirectoryInfo hier, denn Sie scheinen besorgt zu sein, nur mit der Manipulation der Dateien in dem Verzeichnis.
Ich verstehe, dass. der beste Weg, dies zu tun ist, um eine Liste der Dateien, die entsprechen, und löschen Sie alle Dateien, die nicht in der Liste zuordnen.
Wo haben Sie "Außer(matches))"..ich bekomme eins von diesen schönen " - System.Array enthält keine definition für 'Außer'.." - Fehler.. Bin ich fehlt ein "über-System.Etwas;" an der Spitze? Ich habe System und System.IO .. nicht sicher, wo die Ausnahme (oder Enthält ) sein könnte.. Google-Suche dont zu sein scheinen zu helfen viel, ich vermute, weil 'Außer' kann nicht Teil von standard-c# - Zeug...nicht sicher, dass tho..bin noch ein noob. hehe . Irgendwelche Vorschläge? Danke!!
Nicht sicher, ob diese Fragen, aber ich will nicht zu verwenden .NET-Zeug, da, wie ich es momentan verstehe es, es würde ein extra .dll-Datei und/oder das Programm größer. Für meine Bedürfnisse, ich will, um Sie auf einem einzigen tragbaren exe-Datei.
Außer ein LINQ-Methode. Sie müssen
using System.Linq
und einen Verweis aufSystem.Core.dll
. Ansonsten könnten Sie ersetzen die außer-Methode mitif(matches.Contains(file)) continue;
in der Schleife.InformationsquelleAutor Jason Watkins
Einfach testen, um zu sehen, ob die
FileInfo.Name
- Eigenschaft (string)StartsWith
oderEndsWith
einer angegebenen Zeichenfolge.Oder wenn Sie auf der Suche nach einem Wort, überall in den Dateinamen, verwenden Sie die
Contains
Methode:Ich denke, ich habe diese Arbeit jetzt. Danke!
Ich war in der Lage zu ändern, eine Kombination von diesen und anderen Antwort, es funktioniert. (wünschte, ich könnte 'VoteUp' aber noch neu hier).Danke!
InformationsquelleAutor Inisheer
Erhalte eine Fehlermeldung, die sagt, es gibt keine definition für 'Contains', und keine Erweiterungsmethode 'Enthält'. Wie bei den anderen hier beantworten, ich vermute mir fehlt ein "über-System.Etwas" oben an der Spitze, aber keine Ahnung, was das wäre. Möchte versuchen, diese beiden Methoden, obwohl. Danke!
nach dem hinzufügen "verwenden von System.Linq" pro Jason Watkins Vorschlag, ich fand, dass die Weise, die ich derzeit getestet, diese Methode würde nur schauen das Haupt-Verzeichnis selbst, und keine der Dateien oder Unterordner innerhalb. Trotzdem danke.
Ich war in der Lage zu ändern, eine Kombination von diesen und anderen Antwort, es funktioniert. (wünschte, ich könnte 'VoteUp' aber noch neu hier).Danke!
InformationsquelleAutor Shaharyar
Ich denke ich habe eine Lösung für mich.
Die Buchung der vollständige code hier, damit auch andere es verwenden, zwicken, und/oder überprüfen Sie es auf mögliche Fehler.
Dies ist mein erstes mal mit StackOverFlow, und zu wissen, dass ich diese Ressource zur Verfügung, um die Suche und die Fähigkeit, Fragen zu stellen und Menschen tatsächlich helfen kann, ist ein großer Trost für mich, als eine person, die neu auf all dieses Zeug.
Dank einer Tonne zusammen!
//Suche Verzeichnis rekursiv und löschen Sie ALLE sub-Verzeichnisse und Dateien
//mit Namen, die NICHT enthalten, die bestimmten such-pattern
Verwendung :
Dieser code wird eine exception werfen, so wird es versuchen, zu löschen, Ordner enthalten Ordner mit dem Namen "DoNotDelete_". Diese wurden nicht gelöscht, damit Ihr Vorfahr Ordner nicht leer ist und di.Löschen() schlägt fehl. Ich würde vorschlagen, optimieren diese durch Rücksendung Indiz dafür, ob eine Datei oder ein Verzeichnis wurde übersprungen, so dass es nicht ein Versuch sein, um einen Ordner zu löschen, wenn etwas übersprungen wurde es im inneren. Dies sollte sein ODER-ed mit den Ergebnissen der vorherigen Werte zurück, so dass wir nicht versuchen zu löschen c:\Path\MyFolder wenn es enthält den Pfad c:\Path\MyFolder\A\B\C\D\DoNotDelete_.
InformationsquelleAutor CopalFreak