我在文件夹中有'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()
答案 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")
另一件事,使用&用于连接字符串而不是+。