在C#中对Directory.GetFiles的结果进行排序

pro*_*eek 32 c# sorting 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()
    {
         ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要根据文件大小或字母顺序打印出文件信息.如何从Directory.GetFiles()中对结果进行排序?

Jon*_*Jon 62

LINQ非常简单.

按名称排序

var sorted = Directory.GetFiles(".").OrderBy(f => f);
Run Code Online (Sandbox Code Playgroud)

按大小排序

var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);
Run Code Online (Sandbox Code Playgroud)


Dyp*_*ppl 9

按日期排序:(返回FileInfo的可枚举):

Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
                                    OrderBy(f => f.Length);
Run Code Online (Sandbox Code Playgroud)

或者,按名称订购:

Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
                                    OrderBy(f => f.Name);
Run Code Online (Sandbox Code Playgroud)

制作FileInfo情况下是没有必要的按文件名排序,但如果你想要应用不同的排序方法的飞行,最好有你的阵列FileInfo到位对象,然后只是OrderBy他们通过LengthName财产,因此此实现.此外,看起来你FileInfo无论如何都会创建,所以最好还是拥有一个FileInfo对象集合.

对不起我第一次没弄错,应该更仔细地阅读问题和文档.

  • 这不按文件长度排序,而是按**文件名**长度排序。 (2认同)

Pau*_*aul 5

如果您愿意,可以在FileInfo对象上使用LINQ:

var orderedFiles =  Directory.GetFiles("").Select(f=> new FileInfo(f)).OrderBy(f=> f.CreationTime)
Run Code Online (Sandbox Code Playgroud)