118 votes

Récupération des fichiers par date de création en .NET

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

Si j'utilise Directory.GetFiles() il renvoie les fichiers triés par leur nom.

0 votes

J'ai trouvé une question similaire : stackoverflow.com/questions/52842/triage-directory-getfiles

4 votes

GetFiles() fait pas trier, les classer par nom est un accident. Triez vous-même.

246voto

Taskos George Points 1754

Ça pourrait marcher 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...
}

0 votes

System.IO.FileInfo[]' ne contient pas de définition pour 'OrderBy'.

2 votes

C'est une méthode d'extension... msdn.microsoft.com/fr/us/library/bb383977.aspx

19 votes

Je pense qu'il n'y a pas besoin d'appeler la méthode ToArray().

60voto

Sev Points 6532

Vous pouvez utiliser Linq

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

2 votes

La solution DirectoryInfo est beaucoup plus rapide que cela (surtout pour les chemins d'accès au réseau).

9voto

Henrik Points 31

Si vous ne souhaitez 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);
});

6voto

BMG Points 73

Cela renvoie la date de dernière modification et son ancienneté.

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

1voto

Passer Points 51

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

Je ne peux pas le confirmer. Il semble que Directory.GetFiles déclenche un cache du système de fichiers ou du 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 motifs et les deux s'exécutent 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X