Thanks to the GetDirectories and GetFiles methods of the System.IO.Directory class, you need very little code to iterate over all the directories and files of a directory tree. For example, the following code snippet prints the structure of a directory tree and (optionally) the name of files in each directory:
' Assumes the following imports:
' Imports System.IO
Sub PrintDirTree(ByVal dir As String, ByVal showFiles As Boolean, _
Optional ByVal level As Integer = 0)
Dim subdir As String
Dim fname As String
' Display the name of this directory with correct indentation.
Console.WriteLine(New String("-"c, level * 2) & dir)
Try
' Display all files in this directory, with correct indentation.
If showFiles Then
For Each fname In Directory.GetFiles(dir)
Console.WriteLine(New String(" "c, level * 2 + 2) & fname)
Next
End If
' A recursive call for all the subdirectories in this directory.
For Each subdir In Directory.GetDirectories(dir)
PrintDirTree(subdir, showFiles, level + 1)
Next
Catch
' Do nothing if any error (presumably "Drive not ready").
End Try
End Sub
You can pass a directory name to the PrintDirTree procedure, or print the directory tree of all the drives in your system, by using this code:
Dim rootDir As String
For Each rootDir In Directory.GetLogicalDrives
PrintDirTree(rootDir, True)
Next