Autor Beitrag
Roob
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 12.03.14 09:56 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 12.03.14 10:52 
ausblenden C#-Quelltext
1:
2:
3:
DirectoryInfo dinfo = new DirectoryInfo(path);          
foreach (var fileInfo in dinfo.GetFiles().OrderByDescending(x=> x.CreationTime).Skip(50))
    fileInfo.Delete();

Für diesen Beitrag haben gedankt: Roob
Roob Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Roob
Roob Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 12.03.14 12:02 
Alles klar, vielen Dank!
Das war eine super veständliche Erklärung! :)