У мене є папка, яка містить багато файлів. Чи є простий спосіб отримати імена файлів у каталозі, відсортовані за датою / часом їх створення?
Якщо я використовую 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
// 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);
});
@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
Якщо продуктивність є проблемою, ви можете використовувати цю команду в MS_DOS:
dir /OD >d:\dir.txt
Ця команда генерує файл dir.txt у ** d: ** root, щоб усі файли були відсортовані за датою. А потім прочитайте файл із вашого коду. Крім того, ви додаєте інші фільтри за допомогою * та?.
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());