0

I'm trying to get a sorted list of images paths strings in a praticular directory. The directory contains 43 images named by numbers: "1.png", "2.png",and so on.

This is my code:

  var sorted = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png").OrderBy(f => f);           
  foreach (string img in sorted) 
  {
   Console.WriteLine(img);
  } 

The result i'm getting

C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\1.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\10.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\11.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\12.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\13.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\14.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\15.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\16.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\17.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\18.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\19.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\2.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\20.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\21.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\22.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\23.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\24.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\25.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\26.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\27.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\28.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\29.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\3.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\30.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\31.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\32.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\33.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\34.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\35.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\36.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\37.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\38.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\39.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\4.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\40.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\41.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\42.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\43.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\5.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\6.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\7.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\8.png C:\Users\itapi\OneDrive\מסמכים\Visual Studio 2013\Projects\Draw\Draw\bin\Debug\9.png

For some reason I can't get a proper alphabetically order sorted list i tried also using LINQ Sort() method,with no success.

Looking for a solution.

Thanks.

Slashy
  • 1,841
  • 3
  • 23
  • 42

1 Answers1

2

Reason is that it is a string so it is ordering by the rules for string sorting. What you want to do is to take the number part of it and order by it:

Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png")
         .OrderBy(f => int.Parse(f.Split('.')[0])); 

If not by using the Split you can use Scott's suggestion to use GetFileNameWithoutExtension:

Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png")
         .OrderBy(f => int.Parse(Path.GetFileNameWithoutExtension(f))); 

Keep in mind that this is a naive solution that assumes that all the file names are (number).png. If it isn't the case you can first check if it is a number and then parse

Gilad Green
  • 36,708
  • 7
  • 61
  • 95