2012-02-21 8 views
5

Próbuję uzyskać listę wszystkich plików w katalogu według daty napisać:Próbując uzyskać listę plików w katalogu według daty utworzenia przy użyciu LINQ

private void Form1_Load(object sender, EventArgs e) { 
    DateTime LastCreatedDate = 
       Properties.Settings.Default["LastDateTime"].ToDateTime(); 

    string [] filePaths = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv") 
         .OrderBy(p => System.IO.File.GetLastWriteTime(p)) 
         .Where(p>=LastCreatedDate); 
} 

pytania

  1. Jak poprawnie zrobić klauzulę WHERE, aby uzyskać tylko pliki większe lub równe od daty w moich ustawieniach?
  2. string [] nie działa dla tego, ponieważ nie wie, jak przeprowadzić konwersję. jakiego typu danych powinienem używać?

Odpowiedz

1

nie testowano, ale powinno działać:

private void Form1_Load(object sender, EventArgs e) 
{ 
    DateTime LastCreatedDate = Properties.Settings.Default["LastDateTime"].ToDateTime(); 
    var filePaths = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv").Select(p => new {Path = p, Date = System.IO.File.GetLastWriteTime(p)}) 
     .OrderBy(x=>x.Date) 
     .Where(x=>x.Date>=LastCreatedDate); 

} 
+0

Zaktualizowałem kod – Novakov

+0

dzięki bardzo! jak analizować każdy element w ścieżkach do plików? foreach (plik var w plikach)? –

+0

Możesz użyć foreach (plik var w filePaths). Każdy element jest anonimowy z właściwościami Ścieżka i Data. – Novakov

1

Można zrobić coś takiego zamiast:

Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv") 
     .Select(p => new { FileName = p, Modified = System.IO.File.GetLastWriteTime(p) }) 
     .Where(p => p.Modified > LastCreatedDate) 
     .OrderBy(p => p.Modified); 
+0

Błąd Nie można niejawnie przekonwertować typu "System.Linq.IOrderedEnumerable 'do' napis [] '\t C: \ Users \ –

+0

Użyj 'var x = ...'. Daje to wyliczalny wynik utworzonego anonimowego typu. –

+0

dziękuję !! możesz pomóc w tym http://stackoverflow.com/questions/9386705/c-sharp-getting-last-element-in-linq-statement –

2

Czy jest jakiś powód, dla którego nie używasz DirectoryInfo zamiast Directory - to nie musisz parsować ścieżek plików z powrotem do Files, aby uzyskać daty lub zapisać daty w oddzielnej zmiennej:

DateTime lastCreatedTime = new DateTime(2012, 01, 30, 05, 12, 00); 

var files = new DirectoryInfo(@"\\Pontos\completed\").GetFiles("*_*.csv") 
      .Where(f => f.LastWriteTime >= lastCreatedTime) 
      .OrderBy(f => f.LastWriteTime) 
      .Select(f => new {f.FullName}); 

foreach (var file in files) { 
    Console.WriteLine(file.FullName); 
} 
Powiązane problemy