VB.net递归搜索文件类型

时间:2016-02-03 16:25:02

标签: vb.net recursion

我有一个小项目,需要对文件夹和子文件夹进行递归扫描(从用户的顶级目录' choice(TextBox_folder_select)开始,搜索具有所选扩展名的文件(TextBox_Extension.Text),然后将文件名添加到列表框中。我从这开始:

    Dim Folder As New IO.DirectoryInfo(TextBox_folder_select.Text)
    For Each File As IO.FileInfo In Folder.GetFiles("*." & TextBox_Extension.Text, IO.SearchOption.AllDirectories)
        ListBox1.Items.Add(File.Name)
    Next

...在用户具有对目录树的完全访问权限的情况下运行良好,但是使用' IO.SearchOption.AllDirectories'当用户选择包含他们无权访问的目录的路径时,该方法会抛出错误(System.UnauthorizedAccessException)。

编辑x 2:

好的,Rumpelstinsk引导我走向一个部分答案:

    Delegate Sub processfiledelegate(ByVal path As String)
Sub main()
    Dim path = TextBox_folder_select.Text
    Dim ext = "*." & TextBox_Extension.Text

    Dim runprocess As processfiledelegate = AddressOf processfile
    applyallfiles(path, ext, runprocess)
End Sub

Sub processfile(ByVal path As String)
    Dim files As String
    files = IO.Path.GetFileName(path)
    ListBox1.Items.Add(files)
End Sub

Sub applyallfiles(ByVal folder As String, ByVal extension As String, ByVal fileaction As processfiledelegate)
    For Each File In Directory.GetFiles(folder, extension)
        fileaction.Invoke(File)
    Next
    For Each subdir In Directory.GetDirectories(folder)
        Try
            applyallfiles(subdir, extension, fileaction)
        Catch ex As Exception
        End Try
    Next
End Sub

虽然我还没有完全理解“代表”的用法,但我可以阅读这些内容。列表框现在包含所有扩展名为所选文件的路径。好开始。感谢。

Exponent然后建议如何显示文件名,而不是完整路径。感谢。

为了允许用户从列表框中打开所选文件,我重新运行了专门寻找该文件名的委托子例程。似乎运作良好。

再次感谢所有人。

1 个答案:

答案 0 :(得分:0)

您可以将此功能的结果添加到列表框中:

IO.Path.GetFileName(path)

IO.Path.GetFileNameWithoutExtension(path)