获取目录中所有文件夹和子文件夹

9

我正在学习VB.net,我想知道如何获取目录内所有文件夹和子文件夹,并将它们全部添加到一个列表框中。我还希望在扫描时列出当前找到的文件夹,就像显示当前找到的文件夹一样。我尝试了一些方法,但似乎都不起作用。我尝试了这个:

Sub GetDirectories(ByVal StartPath As String, ByRef DirectoryList As ArrayList)
    Dim Dirs() As String = Directory.GetDirectories(StartPath)
    DirectoryList.AddRange(Dirs)
    For Each Dir As String In Dirs
        GetDirectories(Dir, DirectoryList)
    Next
    For Each item In DirectoryList
        ListBox1.Items.Add(item)
    Next
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim DirList As New ArrayList
    GetDirectories("c:\hexing\", DirList)
End Sub
4个回答

12

试试这个

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
    Dim DirList As New ArrayList
    Dim Dirs() As String = Directory.GetDirectories(StartPath)
    DirList.AddRange(Dirs)
    For Each Dir As String In Dirs
        GetDirectories(Dir, DirectoryList)
    Next
    Catch ex As Exception
End Try
End Sub

(或者)

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For Each Dir As String In Directory.GetDirectories("c:\Program Files")
            ListBox1.Items.Add(Dir)
        Next
End Sub

编辑

根据VB.NET 05,列出文件夹、子文件夹和子子文件夹:

最有效的方法是使用递归:

 Private Function getAllFolders(ByVal directory As String) As String()
        'Create object
        Dim fi As New IO.DirectoryInfo(directory)
        'Array to store paths
        Dim path() As String = {}
        'Loop through subfolders
        For Each subfolder As IO.DirectoryInfo In fi.GetDirectories()
            'Add this folders name
            Array.Resize(path, path.Length + 1)
            path(path.Length - 1) = subfolder.FullName
            'Recall function with each subdirectory
            For Each s As String In getAllFolders(subfolder.FullName)
                Array.Resize(path, path.Length + 1)
                path(path.Length - 1) = s
            Next
        Next
        Return path
 End Function

第二个代码没有获取到所有的文件夹,我希望它可以获取到主目录下的所有文件夹,并获取这些文件夹中的所有子文件夹。无论如何,还是谢谢。 - TestUser1
@xGh0stSn1p3r 看一下我的修改。它将使你获取所有子文件夹。 - Vignesh Kumar A
谢谢,但是在开始时,它会有点冻结,停留一段时间,无法移动或做任何操作。是否有任何方法可以在后台运行它,以便您仍然可以移动窗体?或者每次找到一个目录时将其添加到列表框中,而不是只停留在那里?谢谢。编辑*当在列表框上时,它只显示字符串[]数组。 - TestUser1
对我来说运行得很好。不过需要做一个更改,因为函数有一个新名称:getAllFolders现在是IO.Directory.GetDirectories(subfolder.FullName)。 - David A Stumpf

3

我已经尝试过这个方法,它可以工作,但是它无法获取目录中的子文件夹,我希望它可以获取每个文件夹中的所有子文件夹。不管怎样,谢谢。 - TestUser1
IO.Directory.GetDirectories("主目录路径", "*", IO.SearchOption.AllDirectories) 似乎可以获取所有子目录。 - Nitin

2

最简单的方法是:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    GetDirectories(Label1.Text)
End Sub

Sub GetDirectories(ByVal StartPath As String)
    For Each Dir As String In IO.Directory.GetDirectories(StartPath)
        CheckedListBox1.Items.Add(Dir)
        GetDirectories(Dir)
    Next
End Sub

看起来你的第一行代码开头缺少3个空格(但我无法修复,因为编辑必须至少有6个字符)。 - NH.

0

我是根据“user10795772”提供的示例代码开发的(非常感谢)。但我将其用于列出所有子文件夹中的所有文件。以下是我的代码。

Private Sub GetDirectories(ByVal StartPath As String)
    For Each Dir As String In IO.Directory.GetDirectories(StartPath)
        RichTextBox1.AppendText(Dir + vbCrLf)
        GetDirectories(Dir)
    Next
End Sub

Private Sub gafad(ByVal mfd As String) 'Get all files all directories
    For Each foundFile As String In My.Computer.FileSystem.GetFiles(mfd)
        RichTextBox1.AppendText(foundFile + vbCrLf)
    Next

    For Each fd As String In IO.Directory.GetDirectories(mfd)
        If InStr(fd, "$") = False Then 'Not list for system folder
            RichTextBox1.AppendText(fd + vbCrLf)
            For Each foundFile As String In My.Computer.FileSystem.GetFiles(fd)
                RichTextBox1.AppendText(foundFile + vbCrLf)
            Next
            GetDirectories(fd)
        End If
    Next
End Sub

当使用时,只需调用gafad("目录")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接