打开/导入多个文件vb.net

时间:2017-03-12 19:14:46

标签: vb.net

好的我想尽力解释这个。

所以我有一个图像缩略图列表查看器。 我需要能够单击一个按钮,然后加载完整的目录。问题是加载图像的正常方式,但它们不正常。 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

1 个答案:

答案 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