2016-06-05 20 views
4

Ich verwende WinForms. In meinem Formular habe ich ein Textfeld, wo ich einen Dateipfad platzieren, um die Dateien in diesem bestimmten Ordner zu sehen. Das Problem ist, dass mein Array-Index die Dateien anders sortiert, als was ich in meinem Ordner sehe. Wie erreiche ich, dass mein Array dem entspricht, was ich in meinem Ordner sehe?Abrufen von Dateien mit einem Array in der Reihenfolge

private void Button_Click(object sender, EventArgs e) 
    { 
     string[] array1 = Directory.GetFiles(img_Source_TxtBox.Text); 
    } 
  • Beachten Sie, dass mein Array-Index von diesem bestimmten Verzeichnis zufällig ist.

Array Werte

enter image description here

Mein Ordner Werte

enter image description here

+0

Wenn Sie nur das Array sortieren sie in der gleichen Reihenfolge sein werden, wie Sie sie es den Ordner zu sehen. – Peter4499

+0

Vielen Dank für Ihre Hilfe! Sie alle haben mir geholfen, die Lösung zu finden. – taji01

+1

Mögliches Duplikat von [Natürliche Sortierreihenfolge in C#] (http://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp) –

Antwort

4

Das Problem ist, dass die Sortierreihenfolge Sie sehen Teil von Windows Datei-Explorer-Sitzung ist, ist es nicht, wie die Dateien „sortiert“ auf der Festplatte sind. Wie Sie wissen, können Sie zwei Fenster öffnen und anders sortieren.

Noch etwas näher zu kommen, was Sie benötigen Sie untersuchen können:

  • , wie Dateien in Windows standardmäßig so etwas wie neutrale Ordnung,
  • sortiert werden, ob es irgendwelche Unterschiede in Sortieralgorithmus in Windows sind (zum Beispiel Namen mit Zahlen)

Dann müssen Sie die gleiche Logik in Ihrer Anwendung anwenden.

EDIT: Gefunden ein Beitrag, der weitere Details zu diesem Thema gibt: Natural Sort Order in C#

3

Directory.GetFiles nicht Sortierreihenfolge garantiert.

MSDN sagt -

Die Reihenfolge der Dateinamen zurückgegeben wird nicht garantiert; Verwenden Sie die Methode Sort , wenn eine bestimmte Sortierreihenfolge erforderlich ist.

Dies bedeutet, dass Sie dies tun müssen. Ich empfehle die Verwendung Linq für die Bestellung.

string[] array1 = Directory.GetFiles(img_Source_TxtBox.Text) 
          .OrderBy(x=>x) 
          .ToArray(); 
2
 string[] array1 = Directory.GetFiles(img_Source_TxtBox.Text); 
// string[] array1 = new string[] { "a", "d", "e", "c", "f", "i" }; 
       Array.Sort(array1); // ascending order 
       foreach (string aa in array1) 
       { 
        MessageBox.Show(aa.ToString()); 
       } 
       Array.Reverse(array1); // descending order 

       foreach (string aa in array1) 
       { 
        MessageBox.Show(aa.ToString()); 
       } 
Verwandte Themen