VB.NET Recursive File Directory Function

Recursively scan directories for files using a Stack collection to store results.

dot net perls

Recursive files. 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.FunctionFile

Example. 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.Path
Stack: It uses Stack to build up a list of paths it needs to process. It then processes each directory path in the stack, adding all the files each time.
Main: 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.
VB.NET program that recurses directories Imports System.IO ''' <summary> ''' This class contains directory helper method(s). ''' </summary> Public Class FileHelper ''' <summary> ''' This method starts at the specified directory. ''' It 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

Output. The output of the 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

Summary. 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.


© 2007-2020 sam allen. send bug reports to info@dotnetperls.com.