Получение файлов по дате создания в .NET - PullRequest
78 голосов
/ 22 января 2011

У меня есть папка, которая содержит много файлов. Есть ли простой способ получить имена файлов в каталоге, отсортированные по дате и времени их создания?

Если я использую Directory.GetFiles(), он возвращает файлы, отсортированные по имени.

Ответы [ 7 ]

168 голосов
/ 22 января 2011

это может сработать для вас.

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...
}
42 голосов
/ 22 января 2011

Вы можете использовать Linq

var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);
8 голосов
/ 13 мая 2014

Если вы не хотите использовать 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);
});
4 голосов
/ 05 сентября 2012

Возвращает дату последнего изменения и его возраст.

DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)
1 голос
/ 22 ноября 2017

@ jing: «Решение DirectoryInfo намного быстрее, чем это (особенно для сетевого пути)»

Я не могу это подтвердить. Кажется, что Directory.GetFiles запускает файловую систему или сетевой кэш. Первый запрос занимает некоторое время, но следующие запросы выполняются намного быстрее, даже если были добавлены новые файлы. В моем тесте я сделал Directory.getfiles и info.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
0 голосов
/ 23 июня 2019

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

dir /OD >d:\dir.txt

Эта команда генерирует файл dir.txt в ** d: **, кореньвсе файлы отсортированы по дате.А затем прочитайте файл из вашего кода.Также вы добавляете другие фильтры по * и?.

0 голосов
/ 07 апреля 2018
            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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...