按文件创建日期排序(和枚举)目录列表?

Err*_*Efe 5 c# linq

所以我有这个例程:

public static IEnumerable<string> GetFiles( string path, string[] searchPatterns, SearchOption searchOption = SearchOption.TopDirectoryOnly) {
    return searchPatterns.AsParallel()
                         .SelectMany(searchPattern => 
                             Directory.EnumerateFiles(path, searchPattern, searchOption))
                         .OrderBy<string, string>( (f) => f)
                         .Distinct<string>();
}
Run Code Online (Sandbox Code Playgroud)

它的工作,但按名称排序文件,我需要订购其创建日期返回的文件.如果项目是例程中的字符串,我该如何排序呢?我想使用枚举原因文件预计超过1k.

谢谢.

Jon*_*yna 13

我不确定你真的想要为该查询使用任务并行库.出于某些原因,请参阅此问题如何使用C#在磁盘上查找所有exe文件?.

至于通过创建日期枚举文件,我将通过创建一个新的启动功能DirectoryInfo的使用提供的路径,然后调用.EnumerateFiles(字符串模式,SearchOption searchOption)来获取所有符合模式的文件.最后,您可以通过返回的枚举中的FileInfo对象的CreationTime属性进行排序,然后返回完整的FileInfo对象,或者仅返回其名称,如下所示:

public static IEnumerable<string> GetFiles( string path, string[] searchPatterns, SearchOption searchOption = SearchOption.TopDirectoryOnly) {
    DirectoryInfo dir = new DirectoryInfo(path);
    var dirs = (from file in dir.EnumerateFiles(searchPatterns, searchOptions)
            orderby file.CreationTime ascending
            select file.Name).Distinct(); // Don't need <string> here, since it's implied
    return dirs;
}
Run Code Online (Sandbox Code Playgroud)

注意:我目前无法访问编译器,但我相信上面的代码没有错误.