Recursive File Copier Function

Have you ever had the need for a function to copy every file in a directory… wait no longer… here is a recursive way to copy files:

Sub CopySelectedFiles(ByVal strSourceDirectory As String, ByVal strDestDirectory As String, ByVal strSearchString As String)
  Dim dirInfo As New DirectoryInfo(strSourceDirectory)
  Dim fsInfo As FileSystemInfo

  For Each fsInfo In dirInfo.GetFileSystemInfos
    Dim strDestFileName As String = Path.Combine(strDestDirectory, fsInfo.Name)

    If TypeOf fsInfo Is FileInfo And fsInfo.Name.IndexOfAny(strSearchString) > -1 Then
      File.Copy(fsInfo.FullName, strDestFileName, True) ' 'This will overwrite files that already exist
    Else
      CopySelectedFiles(fsInfo.FullName, strDestFileName, strSearchString) 'we have found a subdirectory
    End If
  Next
End Sub


					

Recursive File Search Code

Below is the first function I’m publishing… It uses my favorite programing feature… recursion. Recursion is a tricky thing to do right. So many loops, so many variables, etc… This function searches for a file and all sub-directories of your root/starter directory.

VB.net Source Code:

Public Function SearchForFile(ByVal strSourceDirectory As String, ByVal strSearchString As String) As String
  On Error Resume Next
  Dim ret As String = ""
  Dim dirInfo As New DirectoryInfo(strSourceDirectory)
  Dim fsInfo As FileSystemInfo

  For Each fsInfo In dirInfo.GetFileSystemInfos
    If TypeOf fsInfo Is FileInfo And _
      fsInfo.Name.IndexOfAny(strSearchString) > -1 Then
      'FOUND IT...
      If fsInfo.Name = strSearchString Then
        'return directory where file is located...
        ret = strSourceDirectory
        Exit For
      End If
    Else
      'recurrsively search this sub-folder...
      ret = SearchForFile(fsInfo.FullName, strSearchString)
      If ret <> "" Then Exit For
    End If
  Next

  If ret <> "" Then If Right(ret, 1) <> "\" Then ret = ret & "\"
  SearchForFile = ret
End Function