GetFiles () делает не сортируют, получая их упорядоченный по имени несчастный случай. Просто рассортируйте себя.
Hans Passant
Ответы:
203
это может сработать для вас.
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...
}
Думаю, что вызывать метод ToArray () нет необходимости.
Ivo
AnyIdeas без использования методов расширения / LINQ, потому что я нацелен на .NET 2.0
Pratik
10
Рассмотрите возможность использования info.GetFiles (). OrderBy (p => p.CreationTimeUtc) вместо CreationTime, если есть вероятность, что файлы в каталоге могли быть созданы в разных часовых поясах (включая летнее время)
Стив,
46
Вы можете использовать Linq
var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);
@jing: "Решение DirectoryInfo намного быстрее этого (особенно для сетевого пути)"
Я не могу это подтвердить. Кажется, что Directory.GetFiles запускает файловую систему или сетевой кеш. Первый запрос занимает некоторое время, но следующие запросы выполняются намного быстрее, даже если были добавлены новые файлы. В моем тесте я использовал Directory.getfiles и info.GetFiles с одинаковыми шаблонами, и оба они работали одинаково.
Если производительность является проблемой, вы можете использовать эту команду в MS_DOS:
dir /OD >d:\dir.txt
Эта команда создает файл dir.txt в корневом каталоге ** d: **, чтобы все файлы были отсортированы по дате. А затем прочтите файл из своего кода. Кроме того, вы добавляете другие фильтры с помощью * и?.
Ответы:
это может сработать для вас.
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); });
источник
Это возвращает дату последнего изменения и его возраст.
источник
@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.txt в корневом каталоге ** d: **, чтобы все файлы были отсортированы по дате. А затем прочтите файл из своего кода. Кроме того, вы добавляете другие фильтры с помощью * и?.
источник
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());
источник