2016-12-12 5 views
-3

Ich muss die zwei neuesten Dateien in einem Verzeichnis finden.Wie finde ich die zwei neuesten Dateien in einem Verzeichnis?

kann ich den ersten mit diesem Code finden:

var directory = new DirectoryInfo("f:\\PAB\\bil_prev_ent"); 
var firstfile = (from f in directory.GetFiles("*.pdf") 
       orderby f.LastWriteTime descending 
       select f).First(); 

Ich weiß, mag ich, wie auch die zweite Datei nicht finden kann.

+4

'.Take (2)' anstelle von 'First()'? –

+0

@DmitryBychenko sorry dint sehen Sie Ihren Kommentar – Sajeetharan

+0

@Sajeetharan: es ist OK; wahrscheinlich sollte eine * materiazation * (sagen wir '.ToArray()') in der Antwort erwähnt werden ("wie finde ich auch die zweite Datei" - "myfiles [1]"). –

Antwort

5

Erstellen Sie eine Abfrage und dann wählen Sie, was Sie brauchen, für r Beispiel:

var orderedFiles = directory.EnumerateFiles("*.pdf") 
    .OrderByDescending(f => f.LastWriteTime); 

var newestTwo = orderedFiles.Take(2).ToList(); 

ich verwendet habe EnumerateFiles, weil es nicht alle Dateien in den Speicher laden muss.

+0

Das hat einen Fehler. Siehe mein Kommentar oben – Bauss

+0

@Bauss: nur OP weiß, welche Dateien er will, wenn er die letzten beiden nach 'LastWriteTime' (zuletzt geänderte Dateien) haben will, dann hat er das Recht zu tun. Ich sehe nicht, wie das mit dem Thema zusammenhängt. –

+0

Das funktioniert wie ein Zauber, aber ich benutze ToArray wie vorgeschlagen – Roberto

6

Verwendung Take(n) statt First()

var myfiles = (from f in directory.GetFiles("*.pdf") 
       orderby f.LastWriteTime descending 
       select f).Take(2); 

Die oben werden die Dateien geben, die vor kurzem

geändert werden Wenn Sie die Dateien benötigen, die vor kurzem erstellt werden, verwenden Sie die CreationTime

var myfiles = (from f in directory.GetFiles("*.pdf") 
          orderby f.CreationTime descending 
          select f).Take(2); 
+0

Dies hat einen Fehler. Es findet nur die zwei zuletzt geänderten Dateien. – Bauss

+0

@Bauss ja geändert – Sajeetharan

0

Die Logik, die ich brauche, ist die "CreationTime". Lösung Nummer 3 funktioniert wie ein Zauber, aber ich habe ToArray verwendet.

So der richtige Code ist:

var directory = new DirectoryInfo("f:\\PAB\\bil_prev_ent"); 
var orderedFiles = directory.EnumerateFiles("*.pdf").OrderByDescending(f => f.CreationTime); 
var newestTwo = orderedFiles.Take(2).ToArray(); 
0

Antwort 2:

nun die Dateien ohne vollständigen Pfad.

Wie kann ich den vollständigen Pfad haben?

Verwandte Themen