由于某种原因,外部块似乎没有像我期望的那样递归更新。我希望循环将"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()