web-dev-qa-db-fra.com

Comment récupérer la liste des fichiers dans le répertoire, triés par nom

J'essaie d'obtenir une liste de tous les fichiers d'un dossier à partir de C #. Assez facile:

Directory.GetFiles(folder)

Mais j'ai besoin que le résultat soit trié par ordre alphabétique, car ce sont tous des nombres et j'ai besoin de connaître le nombre le plus élevé du répertoire. Bien sûr, je pouvais les saisir dans un objet tableau/liste, puis faire un tri, mais je me demandais s'il y avait un filtre/paramètre à la place?

Ils sont tous nommés avec des zéros en tête. Comme:

00000000001.log
00000000002.log
00000000003.log
00000000004.log
..
00000463245.log
00000853221.log
00024323767.log

Quelle est la manière la plus simple? Je n'ai pas besoin d'obtenir les autres fichiers, juste le numéro "le plus grand/le plus récent".

20
BerggreenDK
var files = Directory.EnumerateFiles(folder)
                     .OrderByDescending(filename => filename);

(La méthode EnumerateFiles est nouvelle dans .NET 4, vous pouvez toujours utiliser GetFiles si vous utilisez une version antérieure)


EDIT: en fait, vous n'avez pas besoin de trier les noms de fichiers, si vous utilisez la méthode MaxBy définie dans MoreLinq :

var lastFile = Directory.EnumerateFiles(folder).MaxBy(filename => filename);
36
Thomas Levesque
var files = from file in Directory.GetFiles(folder)    
               orderby file descending 
               select file;

var biggest = files.First();

si vous recherchez vraiment le nombre le plus élevé et que ces fichiers journaux sont nommés comme vous l'avez suggéré, que diriez-vous:

Directory.GetFiles(folder).Length
16
yas4891

En étendant ce que @Thomas a dit, si vous n'avez besoin que des meilleurs fichiers X, vous pouvez le faire:

int x = 10;
var files = Directory.EnumerateFiles(folder)
                 .OrderByDescending(filename => filename)
                 .Take(x);
6
Rick Liddle