У меня есть список файлов следующим образом
10_2017
123_2018
500_2017
20_2019
100_2017
25_2017
32_2018
Который я хочу отсортировать как
10_2017
25_2017
100_2017
500_2017
32_2018
123_2018
20_2019
Я могу отсортировать массив по Array.sort(f1,new FileInfoSort)
, если я читаю годыотдельно, но мне нужно это в одном отсортированном массиве или списке
Я пробовал несколько потоков здесь, включая этот метод .Я использовал f1.Sort(Function(x, y) x.Name.CompareTo(y.Name))
и Array.Sort(f1.toArray, New FileInfoSort)
, но безуспешно. Я даже пытался разделить файлы по папкам по годам и раздельно читать их в списки, объединяя их, что, похоже, не сработало
Использование кода
Dim d1 As New DirectoryInfo(AppFolder)
Dim f1 As List(Of FileInfo) = d1.GetFiles("*.LBK", SearchOption.TopDirectoryOnly).ToList
'f1.Sort(Function(x, y) x.Name.CompareTo(y.Name))
f1.SortNatural(Function(x) x.Name)
Разделение файлов по папкам по годам, затем чтение и объединение
Dim d1 As New DirectoryInfo(AppFolder.User.data)
Dim d2 As List(Of DirectoryInfo) = New List(Of DirectoryInfo)
'data folders have names like "d_2019"
For Each d As DirectoryInfo In d1.GetDirectories
If d.Name.ToString.Substring(0, 1) = "d" Then d2.Add(d)
Next
Dim f1 As List(Of FileInfo) = New List(Of FileInfo)
For Each Dir As DirectoryInfo In d2
f1.AddRange(Dir.GetFiles("*.LBK", SearchOption.TopDirectoryOnly))
'trying to sort
'f1.Sort(Function(x, y) x.Name.CompareTo(y.Name))
f1.SortNatural(Function(x) x.Name)
Next
Module ListExt
<DllImport("shlwapi.dll", CharSet:=CharSet.Unicode)>
Private Function StrCmpLogicalW(ByVal lhs As String, ByVal rhs As String) As Integer
End Function
<Extension()>
Sub SortNatural(Of T)(ByVal self As List(Of T), ByVal stringSelector As Func(Of T, String))
self.Sort(Function(lhs, rhs) StrCmpLogicalW(stringSelector(lhs), stringSelector(rhs)))
End Sub
<Extension()>
Sub SortNatural(ByVal self As List(Of String))
self.Sort(AddressOf StrCmpLogicalW)
End Sub
End Module
Любой метод, который я использовал до сих пор, выводит
10_2017
20_2019
25_2017
32_2018
100_2017
123_2018
500_2017
У меня нетИдея, как подойти к этому даже.Если такой список / массив не представляется возможным, идеи о том, как я мог бы структурировать свои файлы так, чтобы я мог читать файлы в порядке, который я предпочитаю выше, также приветствуются!