A program needs to recurse through all directories. It starts at a certain point. It then lists all the file paths in those directories. We can use an efficient and bug-free VB.NET Function for this purpose.Function
First, this is the code for the VB.NET Function that traverses through all subdirectories and then all further subdirectories. It returns a List(Of String), which is often used for file paths.StringPath
Program that recurses directories: VB.NET Imports System.IO ''' <summary> ''' This class contains directory helper method(s). ''' </summary> Public Class FileHelper ''' <summary> ''' This method starts at the specified directory, and traverses all subdirectories. ''' It returns a List of those directories. ''' </summary> Public Shared Function GetFilesRecursive(ByVal initial As String) As List(Of String) ' This list stores the results. Dim result As New List(Of String) ' This stack stores the directories to process. Dim stack As New Stack(Of String) ' Add the initial directory stack.Push(initial) ' Continue processing for each stacked directory Do While (stack.Count > 0) ' Get top directory string Dim dir As String = stack.Pop Try ' Add all immediate file paths result.AddRange(Directory.GetFiles(dir, "*.*")) ' Loop through all subdirectories and add them to the stack. Dim directoryName As String For Each directoryName In Directory.GetDirectories(dir) stack.Push(directoryName) Next Catch ex As Exception End Try Loop ' Return the list Return result End Function End Class Module Module1 ''' <summary> ''' Entry point that shows usage of recursive directory function. ''' </summary> Sub Main() ' Get recursive List of all files starting in this directory. Dim list As List(Of String) = FileHelper.GetFilesRecursive("C:\Users\Sam\Documents\Perls") ' Loop through and display each path. For Each path In list Console.WriteLine(path) Next ' Write total number of paths found. Console.WriteLine(list.Count) End Sub End Module
We see the actual function that you will want in your project. It uses Stack to build up a list of paths it needs to process. It then processes each directory path in the stack individually, adding all the files each time.Stack
Note:The Main sub here shows how to call FileHelper.GetFilesRecursive and specify a path string.
Tip:The path string must specify an absolute path, or one relative to the program. Here, we specify a C:\ path on my computer.
The output of the above program on my computer is a list of 677 file paths. Each path is fully specified and absolute. They are ordered alphabetically. The sample next shows three of the first several lines printed.
Note:I checked the directory in Windows Explorer by right-clicking on the folder and selecting Properties.
And:The dialog shows that there are 677 files in the folder. Further inspection shows all file paths are accurate.
Example output C:\Users\Sam\Documents\Perls\Category1.txt ... C:\Users\Sam\Documents\Perls\Style\all.css ... C:\Users\Sam\Documents\Perls\Main\2D-Array-IEnumerable.html ... 677
Here we saw a powerful and efficient recursive directory and subdirectory traversing function. It works reliably in programs. It is tested. The function provides accurate results.
Review:It demonstrates an excellent use of Stack and List.
It is highly useful in many projects.