2012-06-09 9 views
5

Così ho questa routine:Order (ed enumerare) elenco delle directory in base alla data di creazione del file?

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

e il suo funzionamento, ma di ordinare i file con il suo nome e ho bisogno di ordinare i file restituiti dalla sua data di creazione. Come posso ordinare in base a che se l'articolo è una stringa come nella routine. Voglio usare i file causa di enumerare dovrebbero essere più di 1k.

Grazie.

+1

Si prega di semplificare/mettere a fuoco la domanda. La domanda su "Enumerare" o "Ordinare"? –

+0

@pst Enumera i file ordinati in base alla data di creazione –

risposta

12

non sono sicuro che si vuole veramente essere utilizzando la libreria Task Parallel per quella query. Per alcune ragioni, vedere questa domanda How to find all exe files on disk using C#?.

Per quanto riguarda l'enumerazione dei file per data di creazione, avviare la funzione creando un nuovo DirectoryInfo utilizzando il percorso fornito e quindi chiamare .EnumerateFiles(string pattern, SearchOption searchOption) per ottenere tutti i file corrispondenti al modello. Infine, è possibile ordinare dal CreationTime proprietà degli oggetti FileInfo nell'enumerazione tornato e poi o restituire gli oggetti pieni FileInfo, o semplicemente la loro Name, in questo modo:

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

Nota: non ho accesso ai un compilatore in questo momento, ma credo che il codice di cui sopra è privo di errori.

+0

È necessario includere 'using System.Linq;' – chorbs

2

È necessario passare all'utilizzo di DirectoryInfo.EnumerateFiles, che restituirà una raccolta di istanze FileInfo. È quindi possibile ordinare questi per data e selezionare i nomi.

Problemi correlati