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

时间:2017-02-12 12:03:45

标签: c#

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

     //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);
                }
            }

1 个答案:

答案 0 :(得分:0)

你可以试试这样的事情

// 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);

在此示例中:如果文件来自当前文件夹级别,则文件将包含一个列表,按file.length排序。

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

[更新]

正如@ Abion47所指出的那样,Op的代码与我的解决方案之间似乎没什么区别。根据我在OP中读到的内容,OP没有得到排序列表,这是期望的结果。

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

由于是这种情况,您可能无法正确排序返回的文件,直到枚举完整集合为止。

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

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