Получение файлов по дате создания in.NET
У меня есть папка, которая содержит большое количество файлов. Есть ли простой способ получить имена файлов в каталоге, отсортированном по дате/времени их создания?
Если я использую Directory.GetFiles(), он возвращает файлы, отсортированные по их имени файла.
6 ответов:
это может работать для вас.
using System.Linq; DirectoryInfo info = new DirectoryInfo("PATH_TO_DIRECTORY_HERE"); FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray(); foreach (FileInfo file in files) { // DO Something... }
вы можете использовать Linq
var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);
Если вы не хотите использовать LINQ
// Get the files DirectoryInfo info = new DirectoryInfo("path/to/files")); FileInfo[] files = info.GetFiles(); // Sort by creation-time descending Array.Sort(files, delegate(FileInfo f1, FileInfo f2) { return f2.CreationTime.CompareTo(f1.CreationTime); });
возвращает последнюю измененную дату и ее возраст.
DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)
@jing: "решение DirectoryInfo намного быстрее, чем это (особенно для сетевого пути)"
Я не могу подтвердить это. Кажется, будто каталог.GetFiles запускает файловую систему или сетевой кэш. Первый запрос занимает некоторое время, но следующие запросы намного быстрее, даже если были добавлены новые файлы. В моем тесте я сделал каталог.getfiles и информация.GetFiles с одинаковыми шаблонами и оба работают одинаково
GetFiles done 437834 in00:00:20.4812480 process files done 437834 in00:00:00.9300573 GetFiles by Dirinfo(2) done 437834 in00:00:20.7412646
DirectoryInfo dirinfo = new DirectoryInfo(strMainPath); String[] exts = new string[] { "*.jpeg", "*.jpg", "*.gif", "*.tiff", "*.bmp","*.png", "*.JPEG", "*.JPG", "*.GIF", "*.TIFF", "*.BMP","*.PNG" }; ArrayList files = new ArrayList(); foreach (string ext in exts) files.AddRange(dirinfo.GetFiles(ext).OrderBy(x => x.CreationTime).ToArray());
Comments