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

我有这段代码列出目录中的所有文件。

class GetTypesProfiler { static List Test() { List dataList = new List(); 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()中对结果进行排序?

LINQ非常简单。

按名称排序

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

按大小排序,

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

按日期排序:(返回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对象的数组放在适当的位置,然后按LengthName属性对它们进行OrderBy ,因此这个实现。 此外,看起来你要创建FileInfo ,所以最好有一个FileInfo对象的集合。

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

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

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