Подтвердить что ты не робот

Сортировка результата Directory.GetFiles в С#

У меня есть этот код, чтобы перечислить все файлы в каталоге.

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()
    {
         ...
    }
}

Мне нужно распечатать информацию о файле на основе размера файла или в алфавитном порядке. Как я могу сортировать результат из Directory.GetFiles()?

4b9b3361

Ответ 1

Очень легко с LINQ.

Чтобы отсортировать имя,

var sorted = Directory.GetFiles(".").OrderBy(f => f);

Сортировка по размеру,

var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);

Ответ 2

Чтобы упорядочить по дате: (возвращает перечислимый файл FileInfo):

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 в любом случае.

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

Ответ 3

Вы можете использовать LINQ, если хотите, в объекте FileInfo:

var orderedFiles =  Directory.GetFiles("").Select(f=> new FileInfo(f)).OrderBy(f=> f.CreationTime)

Ответ 4

попробуй это, у меня работает

[System.Runtime.InteropServices.DllImport("Shlwapi.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] arrFi = di.GetFiles("*.*");
Array.Sort(arrFi, delegate(FileInfo x, FileInfo y) { return StrCmpLogicalW(x.Name, y.Name); });