Laden...

Liste mit Dateinamen sortieren [==> NaturalSort]

Erstellt von Komandar vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.799 Views
Thema geschlossen
K
Komandar Themenstarter:in
9 Beiträge seit 2006
vor 12 Jahren
Liste mit Dateinamen sortieren [==> NaturalSort]

Hi.

Ich versuche momentan Dateien aus einem Ordner in einer gen. Liste einzulesen.
Zuvor sortiere und filtere ich diese Dateien, sodass nur die Bilder aufgenommen werden.

Mein Problem is nun, dass die Sortierung nicht richtig durchgeführt wird.

Der Code:

                
                private List<string> fileList = new List<string>();
                private List<string> whitelistExtension = new List<string>();
                whitelistExtension.Add(".jpg");
                whitelistExtension.Add(".png");

                DirectoryInfo di = new DirectoryInfo(filePath);
                FileSystemInfo[] files = di.GetFileSystemInfos("*.*", SearchOption.AllDirectories);
                Array.Sort<FileSystemInfo>(files, delegate(FileSystemInfo a, FileSystemInfo b)
                {
                    return a.Name.CompareTo(b.Name);
                });
                
                foreach (FileInfo fiTemp in files)
                {
                    if (whitelistExtension.IndexOf(fiTemp.Extension.ToLower()) == -1)
                        continue;
                    
                    fileList.Add(fiTemp.Name);
                }

Im Ordner sind bspw. folgende Dateien:
1.jpg; 2.jpg; 3.jpg; 10.jpg; 11.jpg; 100.jpg; 110.jpg; usw.

Nun sieht es nach der Sortierung so aus:
1.jpg; 10.jpg; 100.jpg; 11.jpg; usw. und dann geht es erst wieder bei 2;3... weiter.

Hat jemand ne Idee woran das liegen kann?

301 Beiträge seit 2009
vor 12 Jahren

Strings werden so sortiert. Wenn du sie numerisch sortieren möchtest müsstest du einen eigenen Comparer schreiben und mit angeben.

16.834 Beiträge seit 2008
vor 12 Jahren

Hi,

ungetestet könnte folgendes funktionieren, ansonsten müsstest Du evtl. einen eigenen Comparer schreiben, der die Zahlen der Strings des Filenamens erkennt und daran sortiert:


            List<string> files = new List<string>();

            files.AddRange( Directory.EnumerateFiles( "path", "*.jpg", SearchOption.AllDirectories ) );
            files.AddRange( Directory.EnumerateFiles( "path", "*.png", SearchOption.AllDirectories ) );

            files = files.OrderBy( fileName => fileName.Length ).ThenBy( fileName => fileName ).ToList();

F
10.010 Beiträge seit 2004
vor 12 Jahren

Und da wir NaturalSort (natsort) hier ständig haben, gibt es bestimmt auch was per suche.

6.911 Beiträge seit 2009
vor 12 Jahren

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Thema geschlossen