2016-04-02 32 views
2

Dizindeki dosyaların sıralanmış bir listesini tıklamaya çalışıyorum. Bu dosyalar uzantıları farklıdır.C# Directory.GetFiles() dizini, uzantı içermeyen isme göre

foreach (String File in Directory.GetFiles(directory, "*").OrderBy(f => f)) 
{ 
stringA[i] = File; 
i++; 
} 

Sorun, sonucun beklediğim gibi sıralanmamış olmasıdır. Buna "Stringa" in obtein budur: Benim istediğim ise

1.txt 
10.txt 
11.png 
12.png 
18.png 
19.txt 
2.txt 
21.png 
22.png 
23.png 
24.png 
25.txt 
26.txt 
27.txt 
28.txt 
29.txt 
3.png 
30.txt 
31.txt 
32..png 
33..png 
34..png 
35.png 
4.txt 
40.txt 
41.png etc 

: 1.txt, 2.txt, 3.png, 4.txt, 5.png, 6.txt, 7, 8, 9, 10, 11, 19, 20, 21, 29, 30 ...

Ne yapabilirim?

+0

Lütfen kullandığınız teknolojiyi etiketleyiniz. java gibi C# ya da başka biri gibi? –

+0

C#. Üzgünüm, etiketlerini unutmuşum .. –

+0

Bu örnekte olduğu gibi numaralandırılmış etiketler var mı? –

cevap

0

Buna alfasayısal sıralama denir. Genel olarak özel sıralama için, IComparer arayüzünü ihtiyacınıza uygun özel bir karşılaştırma yöntemi ile uygulayın.

Alfasayısal olarak, Dotnetpearls burada mükemmel bir örneğe ve uygulamaya sahiptir: http://www.dotnetperls.com/alphanumeric-sorting.

Kopya AlphanumComparatorFast sınıf, o zaman bu gibi kullanmak:

 var list = Directory.GetFiles(directory); 
     Array.Sort(list, new AlphanumComparatorFast()); 
+0

Teşekkür ederiz! Şimdi çalışıyor! –

+0

Yardım için mutluyum. Eğer sakıncası yoksa, lütfen kabul etmek için cevabın solundaki onay işaretini vurmayı unutmayın ;-). – Stokke

2
var files = Directory.GetFiles(directory, "*") 
     .Select(file => new { FileName = file, FileNumber = long.Parse(Path.GetFileNameWithoutExtension(file)) }) 
     .OrderBy(data => data.FileNumber); 

foreach(file in files) 
{ 
    Console.WriteLine("{0} (Number: {1})", file.FileName, FileNumber) 
} 

bu ihtiyaç duyabileceğiniz işleme herhangi bir hata atlar unutmayınız.

İlgili konular