对Directory的结果进行排序.GetFiles在vb.net



我有一个目录包含所有tif格式的文件,大约有30个文件的名字像B_1,B_2…直到B_15和F_1,F_2…到f。当我从getfile方法获取文件时。

    Dim di As New IO.DirectoryInfo("c:ABC")
    Dim diar1 As IO.FileInfo() = di.GetFiles()

但是在检索使用每个循环时,我得到的结果像B_1、B_10 B_11, B_12、B_13 B_14, B_15, B_2、B_3……到B_9同样的喜欢f、F_10 F_11、F_12 F_13, F_14, F_15,₂,F_3……到F_9

但问题是我想要那种式样的B_1、B_2 B_3、B_4…B_9 B_10 B_11……B_15然后f、₂F_3、F_4…F_9 F_10, F_11……F_15

实际上我的任务是从目录中获取所有的文件,并加入所有的tiff文件f、B_1、₂、B_2…F_9 B_9, F_10, B_10, F_11, B_11,……F_15 B_15

我已经实现了一切都意味着加入tiff,但文件开始与B和F我存储在各自的数组列表,但由于在B_,B_10..这就是为什么我有问题…

最简单的解决方案是创建一个以字符串形式返回排序键的方法,例如,在您的情况下,这样做就足够了:

Public Function GetFileInfoSortKey(fi As FileInfo) As String
    Dim parts() As String = fi.Name.Split("_"c)
    Dim sortKey As String = Nothing
    If parts.Length = 2 Then
        sortKey = parts(1).PadLeft(10) & parts(0)
    Else
        sortKey = fi.Name
    End If
    Return sortKey
End Function

然后,您可以使用该方法轻松地对FileInfo对象数组排序,如下所示:

Array.Sort(diar1, Function(x, y) GetFileInfoSortKey(x).CompareTo(GetFileInfoSortKey(y)))

如果你不想把它保存为数组,你可以使用LINQ提供的OrderBy扩展方法:

Dim diar1 As IEnumerable(Of FileInfo) = di.GetFiles().OrderBy(Of String)(AddressOf GetFileInfoSortKey)

或者,如果你使用的是不支持lambda表达式的旧版本的Visual Studio,你可以创建一个单独的比较器方法,像这样:

Public Function FileInfoComparer(x As FileInfo, y As FileInfo) As Integer
    Return GetFileInfoSortKey(x).CompareTo(GetFileInfoSortKey(y))
End Function

然后可以使用比较器方法调用Array.Sort,如下所示:

Array.Sort(diar1, AddressOf FileInfoComparer)

相关内容

  • 没有找到相关文章

最新更新