9

So I have this routine:

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

and its working but ordering the files by its name and I need to order the files returned by its creation date. How can I sort by that if the item is an string like in the routine. I want to use Enumerate cause files are expected to be more than 1k.

Thanks.

4

3 に答える 3

16

そのクエリに Task Parallel Library を本当に使用したいかどうかはわかりません。いくつかの理由で、C# を使用してディスク上のすべての exe ファイルを見つけるには、この質問を参照してください。.

作成日ごとにファイルを列挙する場合は、提供されたパスを使用して新しい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;
}

注: 現時点ではコンパイラにアクセスできませんが、上記のコードにエラーはないと思います。

于 2012-06-10T00:55:47.013 に答える
3

FileInfo インスタンスのコレクションを返すDirectoryInfo.EnumerateFilesの使用に切り替える必要があります。次に、これらを日付で並べ替えて、名前を選択できます。

于 2012-06-09T22:57:06.033 に答える