Перечисление всех подкаталогов в VB.net - PullRequest
1 голос
/ 18 января 2012

Может кто-нибудь сказать мне, как перечислить все подпапки в vb.net. я хочу поместить его в список, я создал код, но он выполняет поиск только в текущем местоположении и не включает в себя подпапку. вот мой код ,,

Imports System.IO

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dnum, fnum As Integer


        For Each drive As String In Directory.GetLogicalDrives()
            ListBox1.Items.Add(drive)
        Next drive

        Do While dnum < ListBox1.Items.Count - 3


            Dim di As New DirectoryInfo(ListBox1.Items(dnum))
            'for every subdirectory in the folder, add its name to the listbox
            For Each subdi As DirectoryInfo In di.GetDirectories
                ListBox2.Items.Add(subdi.Name)
            Next
            dnum = dnum + 1

        Loop

        dnum = 0
        Do While dnum < ListBox1.Items.Count - 2
            fnum = 0
            Do While fnum < ListBox2.Items.Count
                Dim loc As String


                loc = (ListBox1.Items(dnum) + ListBox2.Items(fnum))

                Try
                    Dim di As New DirectoryInfo(loc)
                    'for every subdirectory in the folder, add its name to the listbox
                    For Each subdi As DirectoryInfo In di.GetDirectories
                        ListBox3.Items.Add(subdi.Name)
                    Next
                Catch ex As Exception
                End Try

                fnum = fnum + 1

            Loop
            dnum = dnum + 1
        Loop
    End Sub
End Class

Ответы [ 4 ]

2 голосов
/ 18 января 2012

В VB.NET есть пространство имен My, которое предоставляет множество инфраструктур.

Вы можете получить папку, подобную следующей:

My.Computer.FileSystem.GetDirectories("your directory", 
  SearchOption.SearchAllSubDirectories, "*")
1 голос
/ 05 августа 2014

Я добавил опцию, чтобы перечислить только текущий уровень папки или сделать рекурсию, то есть перечислить все уровни.

Private Sub ListDirectories(RootFolder As String)
    For Each drvs In Directory.GetDirectories(RootFolder)
        '--\\ Display the folder
        lstFolders.Items.Add(drvs)              
        '--\\ Checkbox determines whether or not to display only the current folders
        If chkTopLevelOnly.Checked = False Then 
            If drvs.ToString.Length > 0 Then
                Try
                    For Each di In Directory.GetDirectories(drvs)
                        lstFolders.Items.Add(di & "\")
                        Application.DoEvents()
                        '--\\ Do recursive call to this routine until 
                        '--\\ the last branch has been reached
                        ListDirectories(di)
                        Application.DoEvents()
                    Next
                Catch ex As Exception

                End Try
            End If
        End If
    Next
End Sub
1 голос
/ 18 января 2012

Использовать Directory.GetDirectories() статический метод ( MSDN Reference ),

System.IO.Directory.GetDirectories("path","searchpattern",SearchOption.AllDirectories)

Или метод экземпляра,

Dim di As New DirectoryInfo(Loc)
di.GetDirectories("search", SearchOption.AllDirectories)
0 голосов
/ 25 июля 2012

'Этот код будет работать в соответствии с вашим вопросом

Imports System.IO
Imports System.Management
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each drv In Environment.GetLogicalDrives()
            ComboBox1.Items.Add(drv)
        Next
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For Each drvs In Directory.GetDirectories(ComboBox1.Text)
            ListBox1.Items.Add(drvs)
            If drvs.ToString.Length > 0 Then
                Try
                For Each di In Directory.GetDirectories(drvs)
                    ListBox1.Items.Add(di)
                    Next
                Catch ex As Exception

                End Try
            End If

        Next
    End Sub
End Class
...