2011-01-22 12 views
65

Ho una cartella che contiene molti file. C'è un modo semplice per ottenere i nomi dei file nella directory ordinati in base alla loro data/ora di creazione?Ottenere i file per data di creazione in. NET

Se utilizzo Directory.GetFiles(), restituisce i file ordinati in base al nome del file.

+0

Ho trovato una domanda simile: http://stackoverflow.com/questions/52842/sorting-directory -getfiles – Senseful

+4

GetFiles() * non * ordina, ottenerli ordinati per nome è un incidente. Ordina da solo. –

risposta

138

questo potrebbe funzionare per voi.

using System.Linq; 

DirectoryInfo info = new DirectoryInfo("PATH_TO_DIRECTORY_HERE"); 
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray(); 
foreach (FileInfo file in files) 
{ 
    // DO Something... 
} 
+0

'System.IO.FileInfo []' non contiene una definizione per 'OrderBy' –

+2

È un metodo di estensione ... http://msdn.microsoft. it/it/us/library/bb383977.aspx – ivowiblo

+9

Penso che non sia necessario chiamare il metodo ToArray(). – ivowiblo

34

È possibile utilizzare Linq

var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime); 
+0

La soluzione DirectoryInfo è molto più veloce di questa (specialmente per il percorso di rete) – jing

4

Restituisce l'ultima data di modifica e la sua età.

DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date) 
7

Se non si desidera utilizzare LINQ

// Get the files 
DirectoryInfo info = new DirectoryInfo("path/to/files")); 
FileInfo[] files = info.GetFiles(); 

// Sort by creation-time descending 
Array.Sort(files, delegate(FileInfo f1, FileInfo f2) 
{ 
    return f2.CreationTime.CompareTo(f1.CreationTime); 
}); 
1

@jing: "La soluzione DirectoryInfo è molto più veloce allora questo (in particolare per il percorso di rete)"

Non posso confermare questo . Sembra che Directory.GetFiles attivi un filesystem o una cache di rete. La prima richiesta richiede un po ', ma le seguenti richieste sono molto più veloci, anche se sono stati aggiunti nuovi file. Nella mia prova ho fatto un Directory.getfiles e un info.GetFiles con gli stessi schemi e sia gestita altrettanto

GetFiles done 437834 in00:00:20.4812480 
process files done 437834 in00:00:00.9300573 
GetFiles by Dirinfo(2) done 437834 in00:00:20.7412646 
Problemi correlati