Imports System.IO Imports System.Security.Authentication Imports System.Threading Imports FluentFTP Public Class ftp Public Shared HoraControl As DateTime = Now Public Shared Function ObtenerFechaDeModificacion(Fichero As String, ServidorFTP As ServidorFTP) As Date Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() Return ftp.GetModifiedTime(Fichero) ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try Return Nothing End Function Public Shared Sub DescargaFichero(Fichero As String, st As Stream, ServidorFTP As ServidorFTP, Optional Progreso As Action(Of FtpProgress) = Nothing) Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() If Not ftp.DownloadStream(st, Fichero, , Progreso) Then Throw New Exception("No se ha podido descargar el fichero") ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Sub 'Public Shared Async Function DownloadFileAsync() As Task ' Dim token = New CancellationToken() ' Dim cfg As New FtpConfig ' cfg.DataConnectionType = FtpDataConnectionType.PASV ' cfg.EncryptionMode = FtpEncryptionMode.Implicit ' cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 ' Using ftp = New AsyncFtpClient("192.168.41.56", "GestionCOAS", "TsCOAS.2019-", 992, cfg) ' Await ftp.Connect(token) ' ' define the progress tracking callback ' Dim progress As Progress(Of FtpProgress) = New Progress(Of FtpProgress)( ' Sub(p) ' If p.Progress = 1 Then ' ' all done! ' Else ' ' percent done = (p.Progress * 100) ' End If ' End Sub) ' ' download a file with progress tracking ' Await ftp.DownloadFile("C:\TMP\PRUEBA.BIN", "/FIRMADOS_COLEGIADOS/0761/0761-100010.002_001.fir", FtpLocalExists.Resume, FtpVerify.None, progress, token) ' End Using 'End Function Public Shared Async Function DescargaFicheroAsync(Fichero As String, st As Stream, ServidorFTP As ServidorFTP, Optional Progreso As IProgress(Of FtpProgress) = Nothing, Optional ByVal Verificacion As FtpVerify = FtpVerify.None, Optional ct As Threading.CancellationTokenSource = Nothing) As Tasks.Task(Of FtpStatus) Try Dim cfg As New FtpConfig If ServidorFTP.Pasivo Then cfg.DataConnectionType = FtpDataConnectionType.PASV Else cfg.DataConnectionType = FtpDataConnectionType.AutoActive End If cfg.RetryAttempts = ServidorFTP.Reintentos cfg.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita cfg.EncryptionMode = FtpEncryptionMode.Explicit cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita cfg.EncryptionMode = FtpEncryptionMode.Implicit cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else cfg.EncryptionMode = FtpEncryptionMode.None cfg.SslProtocols = Security.Authentication.SslProtocols.None End Select ' Using ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg) Dim ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificadoAsync Dim t As FtpStatus ftp.Encoding = System.Text.Encoding.UTF8 If ct Is Nothing Then Await ftp.Connect() t = Await ftp.DownloadStream(st, Fichero,, Progreso) Else Await ftp.Connect(ct.Token) t = Await ftp.DownloadStream(st, Fichero, , Progreso, ct.Token) End If If t = FtpStatus.Failed Then Throw New Exception("Error descargando fichero " & Fichero) If ct IsNot Nothing Then Await ftp.Disconnect(ct.Token) Else Await ftp.Disconnect End If HoraControl = Now Return t ' End Using Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Function Public Shared Async Function DescargaFicheroAsync(FicheroLocal As String, FicheroRemoto As String, ServidorFTP As ServidorFTP, Optional Progreso As IProgress(Of FtpProgress) = Nothing, Optional ByVal Verificacion As FtpVerify = FtpVerify.None, Optional ct As Threading.CancellationTokenSource = Nothing) As Tasks.Task(Of FtpStatus) Try Dim cfg As New FtpConfig If ServidorFTP.Pasivo Then cfg.DataConnectionType = FtpDataConnectionType.PASV Else cfg.DataConnectionType = FtpDataConnectionType.AutoActive End If cfg.RetryAttempts = ServidorFTP.Reintentos cfg.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita cfg.EncryptionMode = FtpEncryptionMode.Explicit cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita cfg.EncryptionMode = FtpEncryptionMode.Implicit cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else cfg.EncryptionMode = FtpEncryptionMode.None cfg.SslProtocols = Security.Authentication.SslProtocols.None End Select ' Using ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg) Dim ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificadoAsync Dim t As FtpStatus ftp.Encoding = System.Text.Encoding.UTF8 If ct Is Nothing Then Await ftp.Connect() t = Await ftp.DownloadFile(FicheroLocal, FicheroRemoto, FtpLocalExists.Overwrite, Verificacion, Progreso) Else Await ftp.Connect(ct.Token) t = Await ftp.DownloadFile(FicheroLocal, FicheroRemoto, FtpLocalExists.Overwrite, Verificacion, Progreso, ct.Token) End If If t = FtpStatus.Failed Then Throw New Exception("Error descargando fichero " & FicheroLocal & " de " & FicheroRemoto & " ") If ct IsNot Nothing Then Await ftp.Disconnect(ct.Token) Else Await ftp.Disconnect End If HoraControl = Now Return t 'End Using Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Function Public Shared Sub DescargaFichero(FicheroLocal As String, FicheroRemoto As String, ServidorFTP As ServidorFTP, Optional Progreso As Action(Of FtpProgress) = Nothing, Optional ByVal Verificacion As FtpVerify = FtpVerify.None) Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() If ftp.DownloadFile(FicheroLocal, FicheroRemoto, FtpLocalExists.Overwrite, Verificacion, Progreso) = FtpStatus.Failed Then Throw New Exception("No se ha podido descargar el fichero " & FicheroRemoto & " en " & FicheroLocal) ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Sub Public Shared Async Function EnviaFicheroAsync(FicheroOrigen As String, FicheroDestino As String, ServidorFTP As ServidorFTP, Optional Progreso As IProgress(Of FtpProgress) = Nothing, Optional Verificacion As FtpVerify = FtpVerify.None, Optional ct As Threading.CancellationTokenSource = Nothing) As Tasks.Task(Of FtpStatus) Try Dim cfg As New FtpConfig If ServidorFTP.Pasivo Then cfg.DataConnectionType = FtpDataConnectionType.PASV Else cfg.DataConnectionType = FtpDataConnectionType.AutoActive End If cfg.RetryAttempts = ServidorFTP.Reintentos cfg.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita cfg.EncryptionMode = FtpEncryptionMode.Explicit cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita cfg.EncryptionMode = FtpEncryptionMode.Implicit cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else cfg.EncryptionMode = FtpEncryptionMode.None cfg.SslProtocols = Security.Authentication.SslProtocols.None End Select Dim ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificadoAsync ftp.Encoding = System.Text.Encoding.UTF8 Dim t As FtpStatus If ct Is Nothing Then Await ftp.Connect() t = Await ftp.UploadFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, False, Verificacion, Progreso) Else Await ftp.Connect(ct.Token) t = Await ftp.UploadFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, False, Verificacion, Progreso, ct.Token) End If If ct IsNot Nothing Then Await ftp.Disconnect(ct.Token) Else Await ftp.Disconnect End If If t = FtpStatus.Failed Then Throw New Exception("Error enviado fichero " & FicheroOrigen & " a " & FicheroDestino) Return t HoraControl = Now ' End Using Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Function Public Shared Async Function RenombraFicheroAsync(FicheroOrigen As String, FicheroDestino As String, ServidorFTP As ServidorFTP) As Tasks.Task(Of FtpStatus) Try Dim cfg As New FtpConfig If ServidorFTP.Pasivo Then cfg.DataConnectionType = FtpDataConnectionType.PASV Else cfg.DataConnectionType = FtpDataConnectionType.AutoActive End If cfg.RetryAttempts = ServidorFTP.Reintentos cfg.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita cfg.EncryptionMode = FtpEncryptionMode.Explicit cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita cfg.EncryptionMode = FtpEncryptionMode.Implicit cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else cfg.EncryptionMode = FtpEncryptionMode.None cfg.SslProtocols = Security.Authentication.SslProtocols.None End Select Dim ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificadoAsync ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then Await ftp.Connect() If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM) ' MsgBox("renombrando fichero " & FicheroOrigen & " a " & FicheroDestino) Dim t = Await ftp.MoveFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite) ' MsgBox(t) Await ftp.Disconnect() If t = FtpStatus.Failed Then Throw New Exception("Error renombrando fichero " & FicheroOrigen & " a " & FicheroDestino) Return t HoraControl = Now ' End Using Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Function Public Shared Sub EnviaFichero(FicheroOrigen As String, FicheroDestino As String, ServidorFTP As ServidorFTP, Optional Progreso As Action(Of FtpProgress) = Nothing, Optional Verificacion As FtpVerify = FtpVerify.None) Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM) Dim t = ftp.UploadFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, False, Verificacion, Progreso) If t = FtpStatus.Failed Then Throw New Exception("Error enviando fichero " & FicheroOrigen & " a " & FicheroDestino & " ") ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Sub Public Shared Sub EnviaFichero(FicheroOrigen As Byte(), FicheroDestino As String, ServidorFTP As ServidorFTP, Optional Progreso As Action(Of FtpProgress) = Nothing) Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM) Dim t = ftp.UploadBytes(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, False, Progreso) If t = FtpStatus.Failed Then Throw New Exception("Error enviando fichero ") ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Sub Public Shared Sub CreaDirectorio(Directorio As String, ServidorFTP As ServidorFTP) Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() If Not ftp.DirectoryExists(Directorio) Then ftp.CreateDirectory(Directorio, True) End If ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Sub Public Shared Sub EliminaFichero(Fichero As String, ServidorFTP As ServidorFTP) Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() ftp.DeleteFile(Fichero) ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Sub Public Shared Function ExisteFichero(Fichero As String, ServidorFTP As ServidorFTP) As Boolean Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM) Return ftp.FileExists(Fichero) ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Function Public Shared Sub RenombraFichero(FicheroOrigen As String, FicheroDestino As String, ServidorFTP As ServidorFTP) Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado Select Case ServidorFTP.Seguridad Case SeguridadFTP.Explicita ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case SeguridadFTP.Implicita ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12 Case Else ftp.Config.EncryptionMode = FtpEncryptionMode.None ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None End Select ftp.Encoding = System.Text.Encoding.UTF8 If ftp.IsConnected = False Then ftp.Connect() If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM) ftp.MoveFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite) ftp.Disconnect() HoraControl = Now Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Sub 'Public Shared Sub MueveFicheros(PatronFicheroOrigen As String, DirectorioDestino As String, ServidorFTP As ServidorFTP) ' Try ' Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Puerto, ServidorFTP.Usuario, ServidorFTP.Contraseña) ' If ServidorFTP.Pasivo Then ftp.DataConnectionType = ServidorFTP.Pasivo ' AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado ' Select Case ServidorFTP.Seguridad ' Case SeguridadFTP.Explicita ' ftp.EncryptionMode = FtpEncryptionMode.Explicit ' ftp.SslProtocols = Security.Authentication.SslProtocols.Tls ' Case SeguridadFTP.Implicita ' ftp.EncryptionMode = FtpEncryptionMode.Implicit ' ftp.SslProtocols = Security.Authentication.SslProtocols.Tls ' Case Else ' ftp.EncryptionMode = FtpEncryptionMode.None ' End Select ' ftp.Encoding = System.Text.Encoding.UTF8 ' Dim lf = ftp.GetListing(PatronFicheroOrigen) ' If DirectorioDestino.EndsWith("/") = False Then DirectorioDestino &= "/" ' For Each F In lf ' ftp.Rename(F.FullName, DirectorioDestino & F.Name) ' Next ' Catch EX As tsl5.TsExcepcion ' Throw EX ' Catch EX As Exception ' Throw New tsl5.TsExcepcion(EX.Message, EX, "FTP_ERROR.DESCONOCIDO", ) ' End Try 'End Sub Public Shared Function ObtieneListaFicheros(Ruta As String, ServidorFTP As ServidorFTP) As FtpListItem() Try Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto) If ServidorFTP.Pasivo Then ftp.Config.DataConnectionType = FtpDataConnectionType.PASV Else ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive End If ftp.Config.RetryAttempts = ServidorFTP.Reintentos ftp.Config.ConnectTimeout = ServidorFTP.Timeout ' ftp.Config.ListingCulture = Globalization.CultureInfo.CurrentCulture If ftp.IsConnected = False Then ftp.Connect() Dim lf = ftp.GetListing(Ruta) ftp.Disconnect() HoraControl = Now Return lf Catch EX As Exception Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR") End Try End Function Private Shared Sub ValidarCertificado(control As FtpClient, e As FtpSslValidationEventArgs) e.Accept = True End Sub Private Shared Sub ValidarCertificadoAsync(control As AsyncFtpClient, e As FtpSslValidationEventArgs) e.Accept = True End Sub End Class Public Class ServidorFTP Property Servidor As String Property Puerto As Integer Property Seguridad As SeguridadFTP Property Pasivo As Boolean Property Timeout As Integer Property Usuario As String Property Contraseña As String Property Reintentos As Integer Public Sub New(Servidor As String, Puerto As Integer, Usuario As String, Contraseña As String, Optional Seguridad As SeguridadFTP = SeguridadFTP.Ninguna, Optional Pasivo As Boolean = False, Optional timeout As Integer = 20000, Optional Reintentos As Integer = 3) _Servidor = Servidor _Puerto = Puerto _Seguridad = Seguridad _Pasivo = Pasivo _Timeout = timeout _Usuario = Usuario _Contraseña = Contraseña _Reintentos = Reintentos End Sub End Class Public Enum SeguridadFTP Ninguna = 0 Implicita = 1 Explicita = 2 ExplicitaConControl = 3 ExplicitaControlOpcional = 4 SoloControl = 5 SoloDatos = 6 End Enum