2012-06-09 12 views
5

Więc mam ten rutynę:Zamów (i wyliczyć) listing katalogu według daty utworzenia pliku?

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

i jego pracy, ale zamawiania pliki przez jego nazwę i muszę zamówić pliki zwracane przez jego daty utworzenia. Jak mogę sortować według tego, czy element jest ciągiem, jak w procedurze. Chcę użyć wyliczenia, że ​​pliki powodują, że oczekiwane jest więcej niż 1k.

Dzięki.

+1

Proszę uprościć/skoncentrować pytanie. Czy jest pytanie o "wyliczanie" lub "zamawianie"? –

+0

@ pst Wyliczanie plików uporządkowanych według daty utworzenia –

Odpowiedz

12

Nie jestem pewien, czy na pewno chcesz korzystać z biblioteki zadań dla tego zapytania. Z niektórych powodów zobacz to pytanie: How to find all exe files on disk using C#?.

Jeśli chodzi o wyliczanie plików według daty utworzenia, chciałbym uruchomić funkcję, tworząc nową DirectoryInfo, korzystając z podanej ścieżki, a następnie zadzwonić pod numer .EnumerateFiles(string pattern, SearchOption searchOption), aby uzyskać wszystkie pliki pasujące do wzorca. Wreszcie, można zamówić przez majątku FileInfo obiektów CreationTime w zwróconym wyliczenie a następnie albo zwrotu pełnych obiektów FileInfo lub tylko ich Name, tak:

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

Uwaga: Nie mam dostępu do kompilator w tej chwili, ale uważam, że powyższy kod jest wolny od błędów.

+0

Należy dołączyć 'using System.Linq;' – chorbs

2

Musisz przełączyć się na używanie DirectoryInfo.EnumerateFiles, który zwróci kolekcję instancji FileInfo. Następnie możesz posortować je według dat i wybrać nazwy.

Powiązane problemy