У меня есть папка, которая содержит много файлов. Есть ли простой способ получить имена файлов в каталоге, отсортированном по дате/времени создания?
Если я использую Directory.GetFiles()
, он возвращает файлы, отсортированные по их имени файла.
У меня есть папка, которая содержит много файлов. Есть ли простой способ получить имена файлов в каталоге, отсортированном по дате/времени создания?
Если я использую Directory.GetFiles()
, он возвращает файлы, отсортированные по их имени файла.
это может сработать для вас.
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 намного быстрее, чем это (особенно для сетевого пути)"
Я не могу подтвердить это. Кажется, что 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
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());
Если производительность является проблемой, вы можете использовать эту команду в MS_DOS:
dir /OD >d:\dir.txt
Эта команда создает файл dir.txt в корневом каталоге ** d: **, в котором все файлы отсортированы по дате. А затем прочитайте файл из вашего кода. Также вы добавляете другие фильтры по * и?.