2016-09-25 5 views
-1

chaîne mypath = txtPath.Text;Récupère tous les fichiers dans l'ordre tableau par nom C#

DirectoryInfo d = new DirectoryInfo(mypath); 

foreach (FileInfo fi in d.EnumerateFiles("*.jpg").OrderBy(x => x.Name)) 
      txtStatus.Text = txtStatus.Text + fi.Name + Environment.NewLine; 

le résultat de ce que je reçois est ce

banner-noche-estrellas-zacatecas2015.jpg 
banner-noche-estrellas-zacatecas2015_10.jpg 
banner-noche-estrellas-zacatecas2015_11.jpg 
banner-noche-estrellas-zacatecas2015_12.jpg 
banner-noche-estrellas-zacatecas2015_13.jpg 
banner-noche-estrellas-zacatecas2015_14.jpg 
banner-noche-estrellas-zacatecas2015_15.jpg 
banner-noche-estrellas-zacatecas2015_16.jpg 
banner-noche-estrellas-zacatecas2015_17.jpg 
banner-noche-estrellas-zacatecas2015_18.jpg 
banner-noche-estrellas-zacatecas2015_19.jpg 
banner-noche-estrellas-zacatecas2015_2.jpg 
banner-noche-estrellas-zacatecas2015_20.jpg 
banner-noche-estrellas-zacatecas2015_21.jpg 

j'obtenir ceci:

banner-noche-estrellas-zacatecas2015.jpg 
banner-noche-estrellas-zacatecas2015_2.jpg 
banner-noche-estrellas-zacatecas2015_3.jpg 

et ainsi de suite

+0

Ceci est appelé "Natural Sort" et il est beaucoup plus complexe qu'un simple tri comme je l'ai expliqué dans ma réponse à votre question précédente. Vous pouvez trouver quelque chose d'utile dans [cette question/ces réponses] (http://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp). – Steve

Répondre

0

Vous les obtenez en ordre. Le problème est que ce sont des chaînes, donc vous les obtenez dans l'ordre des chaînes.

La solution la plus directe consiste à renommer vos fichiers afin qu'ils aient le même nombre de chiffres, par ex. banner-noche-estrellas-zacatecas2015_2.jpg ->banner-noche-estrellas-zacatecas2015_02.jpg

Si vous faites cela, votre méthode fonctionnera.

Si vous ne voulez pas faire cela, alors vous devez analyser ce nombre comme un int avant d'appeler le tri. Utilisez une regex pour le faire.

+1

En réalité, une regex est probablement trop lourde. Cela vous donnera un 'int' pour trier:' var sortOrder = int.Parse ("0" + fi.Nom.Remplacer ("banner-noche-estrellas-zacatecas2015", "") .Replace ("_", "") .Remplacer (fi.Extension, ""); ' –