Какой хороший способ найти последний созданный файл в папке в C #?

2

У меня есть сетевая папка, которая может содержать до 10 000 файлов (обычно около 5000).

Каков самый полный способ получить путь к файлу последнего созданного файла в этой папке с помощью С#?

В настоящее время я использую ниже, но задавался вопросом, был ли более быстрый способ.

Спасибо.

DirectoryInfo di = new DirectoryInfo(xmlFileLocation);
var feedFiles = di.GetFiles("*.xml");
var sortedFeedFile = from s in feedFiles
                     orderby s.CreationTime descending
                     select s;

if(sortedFeedFile.Count() > 0){
    mostRecentFile = sortedFeedFile.First();
}
  • 0
    Не ответ, но если вы удалите Count (), вы можете использовать FirstOrDefault и вместо этого выполнить нулевую проверку. Я сомневаюсь, что это даст вам значительный прирост производительности! В некоторых случаях вы можете использовать Any ().
Теги:
linq
directory
filesystems

4 ответа

5

Сортировка файлов приводит к выходу O (nlogn). Если все, что вам нужно, самое последнее, было бы проще просто просканировать файлы и найти самое последнее --- O (n).

  • 0
    Я очень сомневаюсь, что время сортировки так важно, однако, безусловно, это то, что нужно посмотреть под профилировщиком.
1

Я считаю, что ваш лучший шанс - подумать над созданием вызова API Win32 - это может быть или не быть быстрее, но, возможно, стоит изучить. Для этого см. WIN32_FILE_ATTRIBUTE_DATA Structure.

0

Это получает FileInfo, или null, если нет файлов, без сортировки:

var feedFiles = di.GetFiles("*.xml");
FileInfo mostRecentFile = null;
if (feedFiles.Any())
{
    mostRecentFile = feedFiles
        .Aggregate((x, c) => x.CreationTime > c.CreationTime ? x : c);
}
  • 0
    Интересная техника, чтобы обойти сортировку - не думал об этом. Лично я не думаю, что сортировка является проблемой производительности.
0

Ещё вопросы

Сообщество Overcoder
Наверх
Меню