递归For Each循环似乎递归不正确



由于某种原因,外部块似乎没有像我期望的那样递归更新。我希望循环将"C:UsersDrise"中的所有目录添加到数组internaldirs()中。有什么建议正确的方法来做到这一点,因为我似乎做得不正确?

Static internaldirs() As String
internaldirs.add("C:UsersDrise")
For Each internaldir As String In internaldirs
    For Each direc As String In Directory.GetDirectories(internaldir)
        internaldirs.Add(direc)
    Next
Next

解决方案:

Sub recursivedirs()
    Static internaldirs As New List(Of String)
    Try
        If internaldirs(0) = "C:UsersDrise" Then
            Call AddDirToList(internaldirs, internaldirs(0))
        End If
    Catch
        internaldirs.Add("C:UsersDrise")
        Call AddDirToList(internaldirs, internaldirs(0))
    End Try
End Sub
Private Sub AddDirToList(ByRef dirs As List(Of String), ByVal currentDir As String)
    dirs.Add(currentDir)
    Try
        For Each subDir As String In Directory.GetDirectories(currentDir)
            AddDirToList(dirs, subDir)
        Next
    Catch
    End Try

简短的回答是:你不能修改你正在迭代的集合(internal - dirs)

长一点的回答:看起来你正在尝试构建一个字符串数组,列出目录树中的文件夹。更好的方法是使用List和递归函数。

Static dirs As List(Of String)
dirs = New List(Of String)
AddDirToList(dirs, "C:UsersDrise")

Private Sub AddDirToList (dirs as List(Of String), currentDir as String) 
    dirs.Add(currentDir)
    For Each subDir As String In Directory.GetDirectories(currentDir) 
        AddDirToList(dirs, currentDir)
    Next
End Sub

请原谅任何语法问题。我更喜欢c#。

正如Andrew Cooper所说,你不能修改For Each循环中使用的集合。

你可以用索引计数器来做。

Dim internaldir As List(Of String)
internaldir.Add("C:UsersDrise")
Dim i As Integer = 0
Do Until i >= internaldir.Count
    Dim internaldir As String = internaldirs(i)
    For Each currentdir As String In Directory.GetDirectories(internaldir)
        internaldirs.Add(currentdir)
    Next
    i += 1
Loop
' If you want an array as output, use:
Dim array As String() = internaldirs.ToArray()

最新更新