2012-06-09 35 views
5

所以我有这个程序:根据文件创建日期排列(并列举)目录列表?

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

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

谢谢。

+1

请简化/关注问题。是关于“枚举”还是“排序”的问题? – 2012-06-09 22:55:21

+0

@pst枚举按其创建日期排列的文件 –

回答

12

我不确定你是否真的想为该查询使用任务并行库。由于某些原因,请参阅How to find all exe files on disk using C#?这个问题。

至于通过创建日期枚举文件,我会用提供的路径创建一个新的DirectoryInfo启动该功能,然后调用.EnumerateFiles(string pattern, SearchOption searchOption)让所有符合模式的文件。最后,您可以在返回的枚举由FileInfo对象的CreationTime财产订单,然后要么返回完整的FileInfo对象,或者只是他们Name,就像这样:

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

注:我没有访问一个编译器,但我相信上面的代码是没有错误的。

+0

必须包含'using System.Linq;' – chorbs

2

您需要切换到使用DirectoryInfo.EnumerateFiles,这将返回FileInfo实例的集合。然后您可以按日期对这些进行排序并选择名称。

相关问题