1

B_1、B_2 ...最大B_15およびF_1、F_2 ...最大F_1のような名前の約30ファイル近くのすべてのtif形式ファイルを含む1つのディレクトリがあります。getfile メソッドからファイルを取得しているとき。

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

しかし、for each ループを使用して取得しているときに、B_1、B_10、B_11、B_12、B_13、B_14、B_15、B_2、B_3... F_1、F_10、F_11、F_12、F_13、F_14、F_15 と同じ B_9 までの結果が得られます。 ,F_2,F_3...F_9まで

しかし問題は、B_1、B_2、B_3、B_4.....B_9、B_10、B_11......B_15、そしてF_1、F_2、F_3、F_4.....F_9、F_10のようなパターンで欲しいということです,F_11......F_15

実際、私のタスクは、ディレクトリからすべてのファイルを取得し、F_1、B_1、F_2、B_2...F_9、B_9、F_10、B_10、F_11、B_11、....F_15、B_15 のようなすべての tiff ファイル ファイルに参加することです。

私はすべての手段をすべて達成しましたが、BとFで始まるファイルはそれぞれのarrayListに保存していますが、B_、B_10にファイルが入っているため..そのため、問題が発生しています...

助けてください...

4

1 に答える 1

1

最も簡単な解決策は、ソートキーを文字列として返すメソッドを作成することです。たとえば、あなたの状況では、次のようなもので十分です。

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)))

配列として保持することに関心がない場合はOrderBy、LINQ が提供する拡張メソッドを使用することをお勧めします。

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

または、ラムダ式をサポートしていない古いバージョンの 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)
于 2014-03-24T17:41:25.813 に答える