2016-05-04 17 views
0
DirectoryInfo info = new DirectoryInfo(Directory Name); 
//... Other code 
var allLines = info.GetFiles("*.dat") 
          .Where(p => p.CreationTime.Date ==DateTime.Today.Date) 
          .SelectMany(p => File.ReadAllLines(p.FullName)); 

Ich versuche, Dateien zu holen, die heute erstellt wurden. Aber mit diesem Code bekomme ich alle .dat-Dateien im Ordner, die über 3 Monate alt sind. Irgendeine Hilfe!! Newbie in C#Filtern von Ordnerdateien basierend auf Datum

+0

Bitte geben Sie weitere Informationen. Was ist 'Info'? –

+0

DirectoryInfo info = new DirectoryInfo (Verzeichnisname) –

+1

Es könnte eine Idee sein, die Problemtrennung zu trennen, damit Sie sie etwas besser debuggen können: 'var todayFiles = info.GetFiles (" *. Dat ") .Wo (p => p.CreationTime.Date == DateTime.Today.Date); ' Und dann: ' var allLines = todayFiles.SelectMany (p => File.ReadAllLines (p.FullName)); ' dann können Sie Überprüfen Sie Ihre Sammlung 'todayFiles' und bestätigen Sie, dass die Eigenschaft' CreationTime' korrekt eingestellt ist – Draken

Antwort

0

Versuchen Sie, diese

Was ich von der Linq Ihnen zur Verfügung gestellten verstanden ist, dass Sie die Dateien des Typs .dat, deren Erstellungsdatum wollen heute ist und den Betrieb schreiben.

var allLines = info.GetFiles("*.dat") 
         .Where(p => p.CreationTime.Date > DateTime.Today.Date.AddMinutes(-1)) 
         .SelectMany(p => File.ReadAllLines(p.FullName)); 
+0

Das erklärt nicht, warum der Operator '==' nicht funktioniert, es scheint seltsam, dass das '>' in diesem Fall und nicht die '==' – Draken

+0

DateTime funktionieren würde. Today.Date wird zurück Datum: {5/4/2016 12:00:00}. Sieh dir die Zeit an. In Ihrem Fall wurden die Dateien nach 12 Uhr erstellt. das heißt, Sie setzen == auf Datum + Uhrzeit. Also was ich mache ist Minus 1 Tag, dann Datum wird {5/3/2016 12:00:00 AM} so Dateien heute erstellt werden immer größer als gestern. – Sid

+0

@Draken diese Technik ist anstelle der CreationTime.Date verwenden, um die Zeitkomponente in dieser Situation zu ignorieren, es sollte nutzlos sein – MikeT

0

Sieht aus wie Ihre:

.SelectMany(p => File.ReadAllLines(p.FullName)); 

falsch ist.

Warum Sie gerade nicht verwenden:

info.GetFiles("*.dat").Where(p => p.CreationTime.Date == DateTime.Today.Date).Select(p => p.FullName); 

Und Sie werden arbeitet Liste der Dateien

+1

, weil er will den Inhalt der Dateien nicht den Namen der Datei – MikeT

+0

sieht aus wie sein Code funktioniert OK – Dmitry

+0

vereinbart, der Code scheint gut, was das Problem ist das Verzeichnis und Dateien selbst – MikeT

0

Der Code in Ordnung zu bekommen. Einzige Sache war, ich musste die vorherige kompilierte/debug-Datei löschen, die keine Datumsfilterung beinhaltete. Es nahm daher das gleiche, obwohl saubere Lösung & Wiederaufbau Lösung getan wurde.

Verwandte Themen