Entwickler-Ecke
Basistechnologien - FileInfo Array sortieren
Roob - Mi 12.03.14 09:56
Titel: FileInfo Array sortieren
Hallo Community :)
Ich bin neu hier und leider beginnt meine Zeit hier direkt mal mit einer Frage..
Ich möchte mir eine Art Datei-Cache schreiben. In einem bestimmten Ordner werden immer wieder neu Dateien generiert
und um das bei oft genutzten Dateien nicht immer wieder machen zu müssen (weil ich sie bisher nach Nutzung löschen lasse) möchte ich mir die 50 letzten aufbewahren.
Ich habe mir gedacht ich verwende die CreationTime als Identifizierungsmerkmal. Immer wenn eine Datei die schon vorhanden ist wieder gebraucht wird, wird die CreationTime erneuert.
Sobald mehr als 50 Dateien im Ordner liegen, wird die älteste gelöscht.
Ich wollte es mir einfach machen und über:
C#-Quelltext
1: 2:
| DirectoryInfo dinfo = new DirectoryInfo(path); FileInfo[] filelist = dinfo.GetFiles(); |
das filelist-Array einfach nach der CreationTime sortieren. Allerdings steh ich hier vor einer Wand.
Ich habe eine totale Blockade momentan..
Könnte mir wer auf die Sprünge helfen?
Gruß Rob :)
Ralf Jansen - Mi 12.03.14 10:52
C#-Quelltext
1: 2: 3:
| DirectoryInfo dinfo = new DirectoryInfo(path); foreach (var fileInfo in dinfo.GetFiles().OrderByDescending(x=> x.CreationTime).Skip(50)) fileInfo.Delete(); |
Roob - Mi 12.03.14 11:04
Danke für die schnelle Antwort!
Nur nochmal zum Verständnis:
Alle Files im Ordner werden verglichen.
OrderByDescending ist die Vergleichsmethode und "x=>" heißt es wird nach der Größe bzw. "Neuheit" sortiert?
.Skip(50) verschont die ersten 50 Dateien und alles was drüber ist wird gelöscht.
Hab ich das soweit richtig verstanden?
Ralf Jansen - Mi 12.03.14 11:13
Zitat: |
Alle Files im Ordner werden verglichen. |
si.
Zitat: |
OrderByDescending ist die Vergleichsmethode und "x=>" heißt es wird nach der Größe bzw. "Neuheit" sortiert? |
Die OrderByDescending Methode wirkt auf die Liste und die Methode(bzw. LambdaAusdruck) der man dieser Methode übergibt bestimmt nach was sortiert wird. x ist einfach nur der (von mir ausgedachte) PlatzhalterName für ein Element in der Liste. Kannst du beliebig ersetzen wenn du einen sprechenderem Bezeichner wünscht. Hier wird also absteigend (da OrderByDescending und nicht OrderBy verwendet wird) nach der CreationTime Property sortiert.
Zitat: |
.Skip(50) verschont die ersten 50 Dateien und alles was drüber ist wird gelöscht. |
genau. Durch Skip werden die ersten n Treffer übersprungen (hier also die 50 neuesten Dateien) womit dann nur die überbleiben die du löschen möchtest.
Roob - Mi 12.03.14 12:02
Alles klar, vielen Dank!
Das war eine super veständliche Erklärung! :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!