【问题标题】:Order filenames by number按数字排序文件名
【发布时间】:2016-02-09 12:01:23
【问题描述】:

我一直在开发一个 c# 图像查看器,它将从我的计算机中读取图像并在程序中显示它们。

//foreach file in path display the filename

foreach (var filename in Directory.GetFiles(<path>))
{
    MessageBox.show(filename);
}

//Get image by number

var image = Directory.GetFiles(<path>).elementatordefault(<picnumber>).tostring());

我的问题是,即使我的图像在文件夹中按顺序排列:1,2,3,4 .....12,13,14....101,102,我的应用程序也会在以下顺序:1,101,102,12,13,2...

如何正确显示图像,就像它们在电脑文件夹中一样? 我不敢相信我需要将每个文件添加到数组或列表中,然后执行排序算法......(我还需要拆分文件路径和扩展名)必须有一种更简单的方法来做到这一点,任何非常感谢您的帮助。

【问题讨论】:

  • 实现natural sort
  • Directory.GetFiles 不会对文件名施加顺序,Windows 资源管理器可能会这样做。您想要的排序类型称为“自然排序”,并且与往常一样,除非相关代码保证按照您想要的方式排序数据,否则您需要自己对数据进行排序。
  • 不能使用 linq?你试过用 linq 订购它们吗?如果它返回一个字符串数组,请查看其他 StackOverflow 帖子Sorting string array in C#
  • @rmjoia 我没试过
  • 而且,如果用户更改了资源管理器中的排序顺序(例如,修改时间的降序),则为:stackoverflow.com/questions/26535224/…

标签: c# image viewer


【解决方案1】:

我终于弄清楚了如何以“自然顺序”对文件进行排序,也许有人会发现这段代码也很有用。

        List<string> mylist = new List<string> { };
        foreach (var f in Directory.GetFiles(FilePath1))
        {
            mylist.Add(f);
        }

        var result = mylist.OrderBy(x => x.Length);

【讨论】:

    【解决方案2】:

    如果您知道文件名的格式,您需要排序和实现自己的比较器。 这个帖子可能会对你有所帮助:Sorting mixed numbers and strings

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 2021-01-18
      • 2022-01-27
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      相关资源
      最近更新 更多