从名称为

时间:2015-09-07 10:01:37

标签: vb.net sorting

我在文件夹中有'N'个文件,文件名遵循一些常见的程序(file0 .... fileN)。文件名如下:

file1.pdf
..
file7.pdf
..
file10.pdf
..
file15.pdf
..
fileN.pdf

使用以下代码将这些文件收集到字符串列表中:

  Dim Files As String() = Directory.GetFiles(folderBase + "\files", "*.pdf")

这里面临的问题是我按以下顺序进入列表:

file1.pdf
file10.pdf
..
file2.pdf
..
file15.pdf
..
fileN.pdf

在file1.pdf之后获取file10.pdf。我想在sequential order(file1.pdf,file2.pdf...etc)

中获取文件名

我也试过这个,但它无法解决我的问题:

Dim Files As List(Of String) = Directory.GetFiles(folderBase + "\files", "*.pdf").OrderBy(Function(f) New FileInfo(f).Name).ToList()

2 个答案:

答案 0 :(得分:2)

如果您需要使用array,则可以使用排序功能

 Dim Files As String() = Directory.GetFiles(folderBase + "\files", "*.pdf")
 System.Array.Sort(Of String)(Files)

答案 1 :(得分:0)

这是一种使用排序字典的方法。它假定文件名是字母后跟数字。这可以通过使文件名长度相同并将其用作排序字典的键来实现。

    'get the file name only
    Dim fnames As IEnumerable(Of String) = From f In Files
                                           Select IO.Path.GetFileNameWithoutExtension(f)

    'get the longest file name
    Dim max As Integer = fnames.Max(Function(fs) fs.Length)
    'a palce for the results
    Dim sd As New SortedDictionary(Of String, String)
    Dim nums() As Char = "0123456789".ToCharArray
    'create dictionary entries.  
    For ix As Integer = 0 To fnames.Count - 1
        Dim fn As String = fnames(ix)
        Dim idx As Integer = fn.IndexOfAny(nums)
        If idx >= 0 Then fn = fn.Insert(idx, New String(" "c, max - fn.Length))
        sd.Add(fn, Files(ix))
    Next

    Dim l As List(Of String) = sd.Values.Select(Function(f) IO.Path.GetFileName(f)).ToList

使用路径时,请使用IO.Path中的方法,例如

    Dim Files As String() = IO.Directory.GetFiles(IO.Path.Combine(folderBase, "files"), "*.pdf")

另一件事,使用&用于连接字符串而不是+。