I am using the following Recursive Directory Copy code, and am having a strange issue.

I am using this to copy and directory and all subdirectories and files to removable media (flash drive). Everything copies perfectly fine except for 1 file. this occurs on the same file every time and sometimes the file copies successfully, but other times it does not. The problem file is a 7-zip archive with a .7z file extension. When it does not successfully copy, the file is only 8 bytes on the flash drive. This is very strange. Any ideas? Thanks for any help troubleshooting this issue.

Code:
' Usage: 
    ' Copy Recursive with Overwrite if exists. 
    ' RecursiveDirectoryCopy("C:\Data", "D:\Data", True, True) 
    ' Copy Recursive without Overwriting. 
    ' RecursiveDirectoryCopy("C:\Data", "D:\Data", True, False) 
    ' Copy this directory Only. Overwrite if exists. 
    ' RecursiveDirectoryCopy("C:\Data", "D:\Data", False, True) 
    ' Copy this directory only without overwriting. 
    ' RecursiveDirectoryCopy("C:\Data", "D:\Data", False, False) 

    ' Recursively copy all files and subdirectories from the specified source to the specified 
    ' destination. 
    Public Sub RecursiveDirectoryCopy(ByVal sourceDir As String, ByVal destDir As String, ByVal fRecursive As Boolean, ByVal overWrite As Boolean)
        Dim sDir As String
        Dim dDirInfo As IO.DirectoryInfo
        Dim sDirInfo As IO.DirectoryInfo
        Dim sFile As String
        Dim sFileInfo As IO.FileInfo
        Dim dFileInfo As IO.FileInfo
        ' Add trailing separators to the supplied paths if they don't exist. 
        If Not sourceDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) Then
            sourceDir &= System.IO.Path.DirectorySeparatorChar
        End If
        If Not destDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) Then
            destDir &= System.IO.Path.DirectorySeparatorChar
        End If
        'If destination directory does not exist, create it. 
        dDirInfo = New System.IO.DirectoryInfo(destDir)
        If dDirInfo.Exists = False Then dDirInfo.Create()
        dDirInfo = Nothing
        ' Recursive switch to continue drilling down into directory structure. 
        If fRecursive Then
            ' Get a list of directories from the current parent. 
            For Each sDir In System.IO.Directory.GetDirectories(sourceDir)
                sDirInfo = New System.IO.DirectoryInfo(sDir)
                dDirInfo = New System.IO.DirectoryInfo(destDir & sDirInfo.Name)
                ' Create the directory if it does not exist. 
                If dDirInfo.Exists = False Then dDirInfo.Create()
                ' Since we are in recursive mode, copy the children also 
                RecursiveDirectoryCopy(sDirInfo.FullName, dDirInfo.FullName, fRecursive, overWrite)
                sDirInfo = Nothing
                dDirInfo = Nothing
            Next
        End If
        ' Get the files from the current parent. 
        For Each sFile In System.IO.Directory.GetFiles(sourceDir)
            sFileInfo = New System.IO.FileInfo(sFile)
            dFileInfo = New System.IO.FileInfo(Replace(sFile, sourceDir, destDir))
            'If File does not exist. Copy. 
            If dFileInfo.Exists = False Then
                sFileInfo.CopyTo(dFileInfo.FullName, overWrite)
            Else
                'If file exists and is the same length (size). Skip. 
                'If file exists and is of different Length (size) and overwrite = True. Copy 
                If sFileInfo.Length <> dFileInfo.Length AndAlso overWrite Then
                    sFileInfo.CopyTo(dFileInfo.FullName, overWrite)
                    'If file exists and is of different Length (size) and overwrite = False. Skip 
                ElseIf sFileInfo.Length <> dFileInfo.Length AndAlso Not overWrite Then
                    Debug.WriteLine(sFileInfo.FullName & " Not copied.")
                End If
            End If
            sFileInfo = Nothing
            dFileInfo = Nothing
        Next
    End Sub