У меня есть сетевая папка, которая может содержать до 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();
}
Сортировка файлов приводит к выходу O (nlogn). Если все, что вам нужно, самое последнее, было бы проще просто просканировать файлы и найти самое последнее --- O (n).
Я считаю, что ваш лучший шанс - подумать над созданием вызова API Win32 - это может быть или не быть быстрее, но, возможно, стоит изучить. Для этого см. WIN32_FILE_ATTRIBUTE_DATA Structure.
Это получает FileInfo, или null, если нет файлов, без сортировки:
var feedFiles = di.GetFiles("*.xml");
FileInfo mostRecentFile = null;
if (feedFiles.Any())
{
mostRecentFile = feedFiles
.Aggregate((x, c) => x.CreationTime > c.CreationTime ? x : c);
}
Это может помочь... http://www.4guysfromrolla.com/articles/060403-1.2.aspx