web-dev-qa-db-fra.com

Obtenir des fichiers par date de création dans .NET

J'ai un dossier qui contient beaucoup de fichiers. Existe-t-il un moyen simple d’obtenir les noms de fichiers du répertoire triés par date/heure de création?

Si j'utilise Directory.GetFiles(), les fichiers sont triés par nom de fichier.

75
Senseful

cela pourrait fonctionner pour vous.

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...
}
162
George Taskos

Vous pouvez utiliser Linq

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

Si vous ne voulez pas utiliser 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);
});
8
Henrik

Ceci retourne la date de dernière modification et son âge.

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

@jing: "La solution DirectoryInfo est beaucoup plus rapide que cela (surtout pour le chemin réseau)"

Je ne peux pas confirmer cela . Il semble que Directory.GetFiles déclenche un système de fichiers ou un cache réseau . La première demande prend un certain temps, mais les demandes suivantes sont beaucoup plus rapides, même si de nouveaux fichiers ont été ajoutés . Dans mon test, j'ai fait un Directory.getfiles et un info.GetFiles avec les mêmes modèles et les deux fonctionnent de la même manière.

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
1
Passer

Si les performances posent problème, vous pouvez utiliser cette commande dans MS_DOS:

dir /OD >d:\dir.txt

Cette commande génère un fichier dir.txt dans ** d: ** root et permet de classer tous les fichiers par date. Et puis lisez le fichier à partir de votre code. En outre, vous ajoutez d'autres filtres par * et?.

0
grandhougday
            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());
0
Ata Hoseini