正在对目录的结果进行排序.C#中的GetFiles

本文关键字:排序 中的 GetFiles 结果 | 更新日期: 2023-09-27 17:58:42

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

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

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

正在对目录的结果进行排序.C#中的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)

试试这个,它对我有效

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

如果您只需要按文件名排序,并且文件标题支持升序或降序,则此操作有效。我添加变量是为了对源和搜索模式有更多的控制。

Using Dir = System.IO;
string Source = yourVariable;
string SearchPattern = yourVariable;
Dir.Directory.GetFiles(Source, SearchPattern, Dir.SearchOption.AllDirectories).OrderBy(s => s).ToList();
// Getting Directory object
DirectoryInfo directoryInfo = new DirectoryInfo(folderName);
// getting files for this folder
FileInfo[] files = directoryInfo.GetFiles();
// Sorting using the generic Array.Sort function based on Names comparison
Array.Sort(files, delegate (FileInfo x, FileInfo y) { return String.Compare(x.Name, y.Name); });
// Sorting using the generic Array.Sort function based on the creation date of every folder
Array.Sort(files, delegate (FileInfo x, FileInfo y) { return DateTime.Compare(x.CreationTime, y.CreationTime); });

数组排序