【问题标题】:Select files from directory order of there names从名称的目录顺序中选择文件
【发布时间】:2015-12-02 20:20:05
【问题描述】:

我在一个文件夹中有“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()

【问题讨论】:

  • 这不是一个解决方案,但是如何重命名您的文件,例如:File001.pdf、file010.pdf、file084.pdf 等等?
  • 我的文件不是那种格式。这些是动态创建的文件,没有填充数字,所以文件名不包含 001 或 002 等
  • 如果文件是一个接一个创建的,那么您可以根据创建日期时间读取它们。
  • 还有一点,当你给你的文件起名字的时候,然后像 File[DateTimeStamp] .. 这样的顺序很容易对它们进行排序。
  • 这是按顺序排列的 - 字典顺序。 “File10”或“File199”中的“1”在“File2”中的“2”之前。如果您无法更改创建它们的内容以使用 File### 表示法,您可能可以按照文件创建日期进行

标签: vb.net sorting


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多