Сортировка результата каталога.GetFiles в C#
У меня есть этот код, чтобы перечислить все файлы в каталоге.
class GetTypesProfiler
{
static List<Data> Test()
{
List<Data> dataList = new List<Data>();
string folder = @"DIRECTORY";
Console.Write("------------------------------------------n");
var files = Directory.GetFiles(folder, "*.dll");
Stopwatch sw;
foreach (var file in files)
{
string fileName = Path.GetFileName(file);
var fileinfo = new FileInfo(file);
long fileSize = fileinfo.Length;
Console.WriteLine("{0}/{1}", fileName, fileSize);
}
return dataList;
}
static void Main()
{
...
}
}
Мне нужно распечатать информацию о файле на основе размера файла или в алфавитном порядке. Как я могу отсортировать результат из каталога.GetFiles ()?
3 ответов
очень легко с LINQ.
Сортировать по имени,
var sorted = Directory.GetFiles(".").OrderBy(f => f);
Сортировать по размеру,
var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);
заказать по дате: (возвращает перечисляемый файл):
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Length);
или, чтобы заказать имя:
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Name);
делая FileInfo
экземпляры не нужны для заказа по имени файла, но если вы хотите применить разные методы сортировки на лету, лучше иметь свой массив FileInfo
объекты на месте, а затем просто OrderBy
их Length
или Name
свойство, следовательно, эта реализация. Кроме того, похоже, что вы собираетесь создать FileInfo
в любом случае, это лучше иметь коллекцию FileInfo
объекты в любом случае.
Извините, я не понял это в первый раз, должен был прочитать вопрос и документы более внимательно.
вы можете использовать LINQ, если хотите, на объекте FileInfo:
var orderedFiles = Directory.GetFiles("").Select(f=> new FileInfo(f)).OrderBy(f=> f.CreationTime)