【问题标题】:Sort FileInfo (DirectoryInfo) by filename按文件名排序 FileInfo (DirectoryInfo)
【发布时间】:2018-12-05 15:28:09
【问题描述】:

我正在使用下面的代码来访问某个路径中的文件:

Dim dirInfo As New DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory & "/images/JobImages/" & projectname & "/" & ImageFolder & "/")
Dim allFiles As IO.FileInfo() = dirInfo.GetFiles("lightbox*.png")

这将按以下顺序恢复以下文件: - 灯箱 4 - 灯箱 3 - 灯箱 2 - 灯箱 1

我的问题是,有没有办法对它进行排序,让它反过来返回?如:-Lightbox1 - Lightbox2 - Lightbox3 - Lightbox4

【问题讨论】:

标签: asp.net .net vb.net


【解决方案1】:

您可以使用 Linq .OrderBy() 方法对结果进行排序,您的问题是排序将使用字符串比较完成。

要解决此问题,您需要先仅提取文件名的数字部分,然后使用此结果进行排序。

void Main()
{
    var files = new[] 
    {
        "Lightbox1.png",
        "Lightbox2.png",
        "Lightbox10.png",
        "Lightbox4.png",
        "Lightbox3.png",
        "Lightbox11.png",
        "Lightbox7.png",
    };

    foreach (var f in files.OrderBy(x=>getFileNumber(x)))
        Console.WriteLine(f);
}

int getFileNumber(string filename)
{
    var n = new String(filename.Where(x=>char.IsNumber(x)).ToArray());
    if (int.TryParse(n, out int i))
        return i;
    // parse failed
    return -1;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多