我正在尝试在特定目录中获取图像路径字符串的排序列表。 该目录包含43个以数字命名的图像:“1.png”,“2. png”,依此类推。
这是我的代码:
var sorted = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png").OrderBy(f => f);
foreach (string img in sorted)
{
Console.WriteLine(img);
}
我得到的结果
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
出于某种原因,我无法获得正确的按字母顺序排序的列表,我也尝试使用LINQ Sort()
方法,但没有成功。
寻找解决方案。
感谢。
答案 0 :(得分:2)
原因是它是一个字符串,因此它按字符串排序规则排序。你想要做的是取数字部分并按顺序排序:
Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png")
.OrderBy(f => int.Parse(f.Split('.')[0]));
如果不使用Split
,您可以使用Scott的建议来使用GetFileNameWithoutExtension
:
Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png")
.OrderBy(f => int.Parse(Path.GetFileNameWithoutExtension(f)));
请记住,这是一个天真的解决方案,假设所有文件名都是(number).png
。如果不是这种情况,您可以先检查它是否为数字,然后解析