2016-12-12 1 views
-3

Мне нужно найти два новых файла в каталоге.Как найти два новых файла в каталоге?

я могу найти первый, используя этот код:

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

Я хотел бы знать, как я могу найти второй файл тоже.

+4

'.Take (2)' вместо 'First()'? –

+0

@DmitryBychenko извините, не забудьте посмотреть ваш комментарий – Sajeetharan

+0

@Sajeetharan: все в порядке; вероятно, * materiazation * (скажем, '.ToArray()') следует упомянуть в ответе («как я могу найти второй файл тоже» - 'myfiles [1]'). –

ответ

5

Создайте запрос, а затем выберите, что вам нужно, fo г Пример:

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

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

Я использовал EnumerateFiles, потому что не нужно загружать все файлы в памяти.

+0

У этого есть недостаток. Смотрите мой комментарий выше – Bauss

+0

@Bauss: только OP знает, какие файлы он хочет, если он хочет последние два в соответствии с 'LastWriteTime' (последние измененные файлы), то он имеет право делать. Я не вижу, как это связано с проблемой вообще. –

+0

Это работает как шарм, но я использую ToArray, как предлагается – Roberto

6

использование Take(n) вместо First()

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

выше даст файлы, которые изменены недавно

Если вам нужны файлы, которые создаются в последнее время, используйте CreationTime

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

У этого есть недостаток. Он находит только два последних измененных файла. – Bauss

+0

@Bauss да модифицировано – Sajeetharan

0

Логика, в которой я нуждаюсь, - это «CreationTime». Решение №3 работает как шарм, но я использовал ToArray.

Так правильный код:

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

Ответ 2:

теперь файлы без полного пути.

Как я могу иметь полный путь?

Смежные вопросы