Ho una cartella che contiene molti file. Esiste un modo semplice per ottenere i nomi dei file nella directory ordinati in base alla data / ora di creazione?
Se lo uso Directory.GetFiles(), restituisce i file ordinati in base al nome del file.
Ho una cartella che contiene molti file. Esiste un modo semplice per ottenere i nomi dei file nella directory ordinati in base alla data / ora di creazione?
Se lo uso Directory.GetFiles(), restituisce i file ordinati in base al nome del file.
Risposte:
questo potrebbe funzionare per te.
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...
}
@jing: "La soluzione DirectoryInfo è molto più veloce di questa (soprattutto per il percorso di rete)"
Non posso confermarlo. Sembra che Directory.GetFiles attivi un filesystem o una cache di rete. La prima richiesta richiede un po 'di tempo, ma le richieste seguenti sono molto più veloci, anche se sono stati aggiunti nuovi file. Nel mio test ho eseguito un Directory.getfiles e un info.GetFiles con gli stessi schemi ed entrambi funzionano allo stesso modo
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
Se le prestazioni sono un problema, puoi utilizzare questo comando in MS_DOS:
dir /OD >d:\dir.txt
Questo comando genera un file dir.txt in ** d: ** root che ha tutti i file ordinati per data. E poi leggi il file dal tuo codice. Inoltre, aggiungi altri filtri per * e?.
DirectoryInfo dirinfo = new DirectoryInfo(strMainPath);
String[] exts = new string[] { "*.jpeg", "*.jpg", "*.gif", "*.tiff", "*.bmp","*.png", "*.JPEG", "*.JPG", "*.GIF", "*.TIFF", "*.BMP","*.PNG" };
ArrayList files = new ArrayList();
foreach (string ext in exts)
files.AddRange(dirinfo.GetFiles(ext).OrderBy(x => x.CreationTime).ToArray());