好的我想尽力解释这个。
所以我有一个图像缩略图列表查看器。 我需要能够单击一个按钮,然后加载完整的目录。问题是加载图像的正常方式,但它们不正常。 1.jpg 10.jpg 100.jpg
For Each file As String In My.Computer.FileSystem.GetFiles(appPath + "\" + ConfigurationManager.AppSettings("activedisplay").ToString + "\" + Bfolder.Text + "\")
ImageListView1.Items.Add(file)
Next
所以我去看了一下过滤器
Dim files = Directory.EnumerateFiles(appPath + "\" + ConfigurationManager.AppSettings("activedisplay").ToString + "\" + Bfolder.Text + "\").
Select(Function(s) Path.GetFileName(s)).ToList
Console.WriteLine("Before: {0}", String.Join(", ", files))
' sort the list using the Natural Comparer:
files.Sort(myComparer)
MsgBox((String.Join(", ", files)))
所以这个脚本按照正确的顺序1,2,3,4,5 ......但是我无法弄清楚如何以这种方式打开它。原因
ImageListViewer1.items.addrange((String.Join(", ", files)))
过载。 就像openFileDialog.FileNames能够一次打开多个文件所以我知道它可能但我不想使用对话框。 至此我需要一种方法将由此产生的文件字符串1.jpg,2.jpg,3.jpg加载到ImageViewerList中。
这将以正确的顺序创建文件的字符串“(String.Join(”,“,files))”有没有办法可以从字符串加载文件。
For Each file As String In My.Computer.FileSystem.GetFiles(appPath, string
并且它能够加载它创建字符串的文件串,就像这样 1.jpg,2.jpg,3.jpg继续查看目录中的所有文件
iv环顾谷歌寻求帮助,并查看了getfiles上的ms页面,但我没有运气。 任何方式任何帮助将不胜感激 提前致谢 -Fox
答案 0 :(得分:0)
您需要编写自己的排序函数来对数值进行排序。 我为CustomSort函数引用了link。下面的代码对文件名进行排序,对我来说效果很好。
Dim Dir As String = appPath + "\" + ConfigurationManager.AppSettings("activedisplay").ToString + "\" + Bfolder.Text + "\"
Dim fileList = New DirectoryInfo(Dir).GetFiles("*.jpg").[Select](Function(o) o.Name).ToList()
Dim sortedList = CustomSort(fileList).ToList()
Public Shared Function CustomSort(list As IEnumerable(Of String)) As IEnumerable(Of String)
Dim maxLen As Integer = list.[Select](Function(s) s.Length).Max()
Return list.[Select](Function(s) New With { _
Key .OrgStr = s, _
Key .SortStr = Regex.Replace(s, "(\d+)|(\D+)", Function(m) m.Value.PadLeft(maxLen, If(Char.IsDigit(m.Value(0)), " "c, "?"c))) _
}).OrderBy(Function(x) x.SortStr).[Select](Function(x) x.OrgStr)
End Function