按大小顺序显示目录和文件c#

按大小顺序显示目录和文件c#,c#,C#,尝试列出计算机上的所有目录和文件,并将它们按大小排序。 我得到了一个文件名及其大小的列表,但它无法将它们按顺序排列。。。非常感谢您的任何建议!干杯 //create instance of drive which contains files DriveInfo di = new DriveInfo(@"C:\"); //find the root directory path DirectoryInfo dirInfo = di.Roo

尝试列出计算机上的所有目录和文件,并将它们按大小排序。 我得到了一个文件名及其大小的列表,但它无法将它们按顺序排列。。。非常感谢您的任何建议!干杯

     //create instance of drive which contains files
        DriveInfo di = new DriveInfo(@"C:\");
        //find the root directory path
        DirectoryInfo dirInfo = di.RootDirectory;

        try
        {

            //EnumerateFiles increases the performance and sort them
            foreach (var fi in dirInfo.EnumerateFiles().OrderBy(f =>f.Length).ToList())
            {
                try
                {

                    //Display each file
                    Console.WriteLine("{0}\t\t{1}", fi.FullName, fi.Length);

                }
                catch (UnauthorizedAccessException UnAuthTop)
                {
                    Console.WriteLine("{0}", UnAuthTop.Message);
                }
            }

你可以试试这样的

// get your folder
DirectoryInfo di = new DirectoryInfo(you path here);

    // create a list of files from that folder
    List<FileInfo> fi = di.GetFiles().ToList();

    // pass the files in a sorted order
    var files =  fi.Where(f => f.FullName != null).OrderByDescending(f => f.Length);
//获取您的文件夹
DirectoryInfo di=新的DirectoryInfo(您可以在此处选择路径);
//从该文件夹创建文件列表
List fi=di.GetFiles().ToList();
//按顺序传递文件
var files=fi.Where(f=>f.FullName!=null).OrderByDescending(f=>f.Length);
在本例中:如果文件来自当前文件夹级别,则文件将包含一个列表,按file.length排序

在尝试将fi传递给变量文件之前,您可能需要检查fi是否为null。然后,可以使用foreach对文件进行迭代

[更新]

正如@Abion47所指出的,Op的代码和我的解决方案之间似乎没有太大区别。从我在OP中读到的内容来看,OP没有得到一个排序列表,这是期望的结果

我所看到的可能有所不同的是,通过使用EnumerateFiles,您可以开始枚举,并且可以在返回整个文件集合之前对文件信息进行操作。它非常适合处理大量文件。而且,在单个文件可用时对其执行操作比GetFiles更高效

既然如此,在枚举完整个集合之前,您可能无法对返回的文件进行正确排序

通过使用GetFiles,您必须等待它返回整个集合。使分类更容易


我不认为GetFiles是处理大型集合的理想选择。在这种情况下,我会将工作划分为多个步骤或使用其他方法。

除了
ToList
是不必要的(并且在枚举之前强制传递整个集合会影响性能)和嵌套的
try-catch
,在给定代码的情况下,它看起来是任意的,我不认为有任何问题会阻止对集合进行排序。它所产生的输出是什么?它与你所期望的有什么不同?是的,我最初没有ToList方法,但它给出了相同的结果。。。它给了我文件的完整列表,但不是按大小顺序排列的。。。但是对于同一文件夹中的所有其他文件,因此在处理它们时,我认为代码假定FileInfo.Length属性值不变。当进程写入文件时,文件确实会更改其长度。对我来说,这可能有多大的危害并不完全清楚,FileInfo中存在一些缓存,在排序时也非常危险。多年来,我一直使用与我的答案类似的代码,来显示许多设计师动态创建的文件夹中的文件。到目前为止没有问题。上载文件并调用列表时,将显示长度为0的文件,并继续下一项。当文件完成上传并刷新屏幕时,它会显示具有适当长度的文件。ToList是多余的。@CSharpie关于ToList在这里是多余的,也许你是对的,但是它满足了等号两边的要求,并且对处理几乎一眨眼就可以显示的数千个文件没有显著影响。为什么检查全名为空?为什么不!你永远不知道人们试图上传什么。举几个例子来说,有些名称显示为不可见或不可访问。此代码在功能上与所显示的代码相同。唯一显著的区别是使用
GetFiles
而不是
EnumerateFiles
OrderByDescending
而不是
OrderBy
。在所有其他条件相同的情况下,我看不到这段代码产生的结果与OP已经产生的结果不同。