' Itero cada directorio del directorio de origen. For Each topDir As DirectoryInfo In New DirectoryInfo(sourceDir).GetDirectories("*", SearchOption.TopDirectoryOnly) ' Itero de forma recursiva cada subdirectorio del directorio actual. For Each subDir As DirectoryInfo In topDir.GetDirectories("*", SearchOption.AllDirectories) ' Itero de forma recursiva cada archivo de texto del directorio actual. For Each txtfile As FileInfo In topDir.GetFiles("*.txt", SearchOption.AllDirectories) If txtfile.Name.Equals(NameCM, StringComparison.OrdinalIgnoreCase) Then curFilename = NameCM ElseIf txtfile.Name.Equals(NameGL, StringComparison.OrdinalIgnoreCase) Then curFilename = NameGL ElseIf txtfile.Name.Equals(NameImp60, StringComparison.OrdinalIgnoreCase) Then curFilename = NameImp60 ElseIf txtfile.Name.Equals(NameImp61, StringComparison.OrdinalIgnoreCase) Then curFilename = NameImp61 ElseIf txtfile.Name.Equals(NameImp62, StringComparison.OrdinalIgnoreCase) Then curFilename = NameImp62 ElseIf txtfile.Name.Equals(NameImp63, StringComparison.OrdinalIgnoreCase) Then curFilename = NameImp63 Else curFilename = String.Empty End If If Not String.IsNullOrEmpty(curFilename) Then Debug.WriteLine(topDir.FullName) Debug.WriteLine(subDir.FullName) Debug.WriteLine(txtfile.FullName) Debug.WriteLine(Path.Combine(topDir.FullName, curFilename)) Using sr As StreamReader = txtfile.OpenText File.AppendAllText(Path.Combine(topDir.FullName, curFilename), sr.ReadToEnd, Encoding.Default) End Using End If Next txtfile Next subDir Next topDirY el error se dá exctamente en esta sentencia: