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".
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);
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
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);