2012-06-09 14 views
5

Así que tienen esta rutina:Ordene (y enumere) la lista de directorios por fecha de creación del archivo?

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

y su trabajo, sino ordenar los archivos por su nombre y necesito para ordenar los archivos devueltos por su fecha de creación. ¿Cómo puedo ordenar por eso si el artículo es una cadena como en la rutina? Quiero usar los archivos de causa Enumerate se espera que sean más de 1k.

Gracias.

+1

favor simplificar/enfocar la cuestión. ¿La pregunta es "enumerar" u "ordenar"? –

+0

@pst enumerar los archivos ordenados por su fecha de creación –

Respuesta

12

no estoy seguro de que realmente quiere ser el uso de la biblioteca de tareas en paralelo para esa consulta. Por alguna razón, vea esta pregunta How to find all exe files on disk using C#?.

En cuanto a enumerar los archivos por fecha de creación, comenzaría la función creando un nuevo DirectoryInfo usando la ruta proporcionada, y luego llamaría al .EnumerateFiles(string pattern, SearchOption searchOption) para obtener todos los archivos que coinciden con su patrón. Por último, se puede ordenar por la propiedad de los CreationTimeFileInfo objetos en la enumeración de regresar y luego o bien devolver los objetos completos FileInfo, o simplemente su Name, así:

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: No tengo acceso a un compilador en este momento, pero creo que el código anterior está libre de errores.

+0

tiene que incluir el uso de 'System.Linq;' – chorbs

2

tiene que cambiar al uso de DirectoryInfo.EnumerateFiles, que devolverá una colección de instancias FileInfo. Puede ordenarlos por fechas y seleccionar los nombres.

Cuestiones relacionadas