From 5ef50ba2d1e499d8928f5ee41d2617333cacaa3c Mon Sep 17 00:00:00 2001 From: davrod Date: Fri, 27 Jun 2025 12:05:16 +0200 Subject: [PATCH] Subida de proyecto --- ftp.cs | 833 +++++++++++++++++++++++++++++++++++++++++ tsFluentFTP.NET.csproj | 27 ++ tsFluentFTP.NET.sln | 25 ++ 3 files changed, 885 insertions(+) create mode 100644 ftp.cs create mode 100644 tsFluentFTP.NET.csproj create mode 100644 tsFluentFTP.NET.sln diff --git a/ftp.cs b/ftp.cs new file mode 100644 index 0000000..f249b7f --- /dev/null +++ b/ftp.cs @@ -0,0 +1,833 @@ +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using FluentFTP; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; + +namespace tsFluentFTP +{ + public class ftp + { + public static DateTime ObtenerFechaDeModificacion(string Fichero, ServidorFTP ServidorFTP) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp, __); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + return ftp.GetModifiedTime(Fichero); + ftp.Disconnect(); + } + catch (Exception EX) + { + throw; + } + return default; + } + + public static void DescargaFichero(string Fichero, Stream st, ServidorFTP ServidorFTP, Action Progreso = null) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp, __); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + if (!ftp.DownloadStream(st, Fichero, progress: Progreso)) + throw new Exception("No se ha podido descargar el fichero"); + ftp.Disconnect(); + } + catch (Exception EX) + { + throw new Exception(EX.Message, EX); + } + } + + public static async Task DescargaFicheroAsync(string Fichero, Stream st, ServidorFTP ServidorFTP, IProgress Progreso = null, FtpVerify Verificacion = FtpVerify.None, CancellationTokenSource ct = null) + { + try + { + var cfg = new FtpConfig(); + if (ServidorFTP.Pasivo) + { + cfg.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + cfg.DataConnectionType = FtpDataConnectionType.AutoActive; + } + cfg.RetryAttempts = ServidorFTP.Reintentos; + cfg.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + cfg.EncryptionMode = FtpEncryptionMode.Explicit; + cfg.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + cfg.EncryptionMode = FtpEncryptionMode.Implicit; + cfg.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + cfg.EncryptionMode = FtpEncryptionMode.None; + cfg.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + // Using ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg) + var ftp = new AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificadoAsync(ftp,__); + FtpStatus t; + ftp.Encoding = System.Text.Encoding.UTF8; + if (ct is null) + { + await ftp.Connect(); + t = (FtpStatus)Conversions.ToInteger(await ftp.DownloadStream(st, Fichero, progress: Progreso)); + } + else + { + await ftp.Connect(ct.Token); + t = (FtpStatus)Conversions.ToInteger(await ftp.DownloadStream(st, Fichero, progress: Progreso, token: ct.Token)); + } + if (t == FtpStatus.Failed) + throw new Exception("Error descargando fichero " + Fichero); + if (ct is not null) + { + await ftp.Disconnect(ct.Token); + } + else + { + await ftp.Disconnect(); + } + return t; + } + // End Using + catch (Exception EX) + { + throw new Exception(EX.Message, EX); + } + } + + public static async Task DescargaFicheroAsync(string FicheroLocal, string FicheroRemoto, ServidorFTP ServidorFTP, IProgress Progreso = null, FtpVerify Verificacion = FtpVerify.None, CancellationTokenSource ct = null) + { + try + { + var cfg = new FtpConfig(); + if (ServidorFTP.Pasivo) + { + cfg.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + cfg.DataConnectionType = FtpDataConnectionType.AutoActive; + } + cfg.RetryAttempts = ServidorFTP.Reintentos; + cfg.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + cfg.EncryptionMode = FtpEncryptionMode.Explicit; + cfg.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + cfg.EncryptionMode = FtpEncryptionMode.Implicit; + cfg.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + cfg.EncryptionMode = FtpEncryptionMode.None; + cfg.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + // Using ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg) + var ftp = new AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificadoAsync(ftp,__); + FtpStatus t; + ftp.Encoding = System.Text.Encoding.UTF8; + if (ct is null) + { + 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); + } + if (t == FtpStatus.Failed) + throw new Exception("Error descargando fichero " + FicheroLocal + " de " + FicheroRemoto + " "); + if (ct is not null) + { + await ftp.Disconnect(ct.Token); + } + else + { + await ftp.Disconnect(); + } + return t; + } + // End Using + catch (Exception EX) + { + throw new Exception(EX.Message, EX); + } + } + + + + public static void DescargaFichero(string FicheroLocal, string FicheroRemoto, ServidorFTP ServidorFTP, Action Progreso = null, FtpVerify Verificacion = FtpVerify.None) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp, __); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + if (ftp.DownloadFile(FicheroLocal, FicheroRemoto, FtpLocalExists.Overwrite, Verificacion, Progreso) == FtpStatus.Failed) + throw new Exception("No se ha podido descargar el fichero " + FicheroRemoto + " en " + FicheroLocal); + + ftp.Disconnect(); + } + catch (Exception EX) + { + throw new Exception(EX.Message, EX); + } + } + public static async Task EnviaFicheroAsync(string FicheroOrigen, string FicheroDestino, ServidorFTP ServidorFTP, IProgress Progreso = null, FtpVerify Verificacion = FtpVerify.None, CancellationTokenSource ct = null) + { + try + { + var cfg = new FtpConfig(); + if (ServidorFTP.Pasivo) + { + cfg.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + cfg.DataConnectionType = FtpDataConnectionType.AutoActive; + } + cfg.RetryAttempts = ServidorFTP.Reintentos; + cfg.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + cfg.EncryptionMode = FtpEncryptionMode.Explicit; + cfg.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + cfg.EncryptionMode = FtpEncryptionMode.Implicit; + cfg.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + cfg.EncryptionMode = FtpEncryptionMode.None; + cfg.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + var ftp = new AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificadoAsync(ftp,__); + ftp.Encoding = System.Text.Encoding.UTF8; + FtpStatus t; + if (ct is null) + { + 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); + } + if (ct is not null) + { + await ftp.Disconnect(ct.Token); + } + else + { + await ftp.Disconnect(); + } + if (t == FtpStatus.Failed) + throw new Exception("Error enviado fichero " + FicheroOrigen + " a " + FicheroDestino); + return t; + } + // End Using + catch (Exception EX) + { + throw new Exception(EX.Message, EX); + } + + } + public static async Task RenombraFicheroAsync(string FicheroOrigen, string FicheroDestino, ServidorFTP ServidorFTP) + { + try + { + var cfg = new FtpConfig(); + if (ServidorFTP.Pasivo) + { + cfg.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + cfg.DataConnectionType = FtpDataConnectionType.AutoActive; + } + cfg.RetryAttempts = ServidorFTP.Reintentos; + cfg.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + cfg.EncryptionMode = FtpEncryptionMode.Explicit; + cfg.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + cfg.EncryptionMode = FtpEncryptionMode.Implicit; + cfg.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + cfg.EncryptionMode = FtpEncryptionMode.None; + cfg.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + var ftp = new AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificadoAsync(ftp,__); + + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + await ftp.Connect(); + if (!ftp.Capabilities.Contains(FtpCapability.MDTM)) + ftp.Capabilities.Add(FtpCapability.MDTM); + + // MsgBox("renombrando fichero " & FicheroOrigen & " a " & FicheroDestino) + bool t = await ftp.MoveFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite); + // MsgBox(t) + await ftp.Disconnect(); + if (Conversions.ToInteger(t) == (int)FtpStatus.Failed) + throw new Exception("Error renombrando fichero " + FicheroOrigen + " a " + FicheroDestino); + return (FtpStatus)Conversions.ToInteger(t); + } + // End Using + catch (Exception EX) + { + Interaction.MsgBox(EX.Message); + throw new tsUtilidades.tsExcepcion(EX.Message, EX, "FTP_ERROR.DESCONOCIDO", null); + } + } + + + public static void EnviaFichero(string FicheroOrigen, string FicheroDestino, ServidorFTP ServidorFTP, Action Progreso = null, FtpVerify Verificacion = FtpVerify.None) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp, __); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + if (!ftp.Capabilities.Contains(FtpCapability.MDTM)) + ftp.Capabilities.Add(FtpCapability.MDTM); + var t = ftp.UploadFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, false, Verificacion, Progreso); + if (t == FtpStatus.Failed) + throw new Exception("Error enviando fichero " + FicheroOrigen + " a " + FicheroDestino + " "); + ftp.Disconnect(); + } + catch (Exception EX) + { + throw new Exception(EX.Message, EX); + } + } + + public static void EnviaFichero(byte[] FicheroOrigen, string FicheroDestino, ServidorFTP ServidorFTP, Action Progreso = null) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp, __); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + if (!ftp.Capabilities.Contains(FtpCapability.MDTM)) + ftp.Capabilities.Add(FtpCapability.MDTM); + var t = ftp.UploadBytes(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, false, Progreso); + if (t == FtpStatus.Failed) + throw new Exception("Error enviando fichero "); + ftp.Disconnect(); + } + catch (Exception EX) + { + throw; + } + } + + + + public static void CreaDirectorio(string Directorio, ServidorFTP ServidorFTP) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp, __); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + + if (!ftp.DirectoryExists(Directorio)) + { + ftp.CreateDirectory(Directorio, true); + } + ftp.Disconnect(); + } + catch (Exception EX) + { + throw; + } + } + + public static void EliminaFichero(string Fichero, ServidorFTP ServidorFTP) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp, __); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + ftp.DeleteFile(Fichero); + ftp.Disconnect(); + } + catch (Exception EX) + { + throw; + } + } + + public static bool ExisteFichero(string Fichero, ServidorFTP ServidorFTP) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp,__); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + if (!ftp.Capabilities.Contains(FtpCapability.MDTM)) + ftp.Capabilities.Add(FtpCapability.MDTM); + return ftp.FileExists(Fichero); + ftp.Disconnect(); + } + catch (Exception EX) + { + throw; + } + } + + + + public static void RenombraFichero(string FicheroOrigen, string FicheroDestino, ServidorFTP ServidorFTP) + { + try + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + ftp.ValidateCertificate += (_, __) => tsFluentFTP.ftp.ValidarCertificado(ftp,__); + switch (ServidorFTP.Seguridad) + { + case SeguridadFTP.Explicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + case SeguridadFTP.Implicita: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit; + ftp.Config.SslProtocols = (System.Security.Authentication.SslProtocols)((int)System.Security.Authentication.SslProtocols.Tls + (int)System.Security.Authentication.SslProtocols.Tls11 + (int)System.Security.Authentication.SslProtocols.Tls12); + break; + } + + default: + { + ftp.Config.EncryptionMode = FtpEncryptionMode.None; + ftp.Config.SslProtocols = System.Security.Authentication.SslProtocols.None; + break; + } + } + ftp.Encoding = System.Text.Encoding.UTF8; + if (ftp.IsConnected == false) + ftp.Connect(); + if (!ftp.Capabilities.Contains(FtpCapability.MDTM)) + ftp.Capabilities.Add(FtpCapability.MDTM); + ftp.MoveFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite); + ftp.Disconnect(); + } + catch (tsUtilidades.tsExcepcion EX) + { + throw EX; + } + + catch (Exception EX) + { + throw new tsUtilidades.tsExcepcion(EX.Message, EX, "FTP_ERROR.DESCONOCIDO", null); + } + } + + + public static FtpListItem[] ObtieneListaFicheros(string Ruta, ServidorFTP ServidorFTP) + { + var ftp = new FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto); + if (ServidorFTP.Pasivo) + { + ftp.Config.DataConnectionType = FtpDataConnectionType.PASV; + } + else + { + ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive; + } + ftp.Config.RetryAttempts = ServidorFTP.Reintentos; + ftp.Config.ConnectTimeout = ServidorFTP.Timeout; + // ftp.Config.ListingCulture = Globalization.CultureInfo.CurrentCulture + if (ftp.IsConnected == false) + ftp.Connect(); + FtpListItem[] lf = ftp.GetListing(Ruta); + ftp.Disconnect(); + return lf; + } + + private static void ValidarCertificado(FtpClient control, FtpSslValidationEventArgs e) + { + e.Accept = true; + } + private static void ValidarCertificadoAsync(AsyncFtpClient control, FtpSslValidationEventArgs e) + { + e.Accept = true; + } + } + + public class ServidorFTP + { + public string Servidor { get; set; } + public int Puerto { get; set; } + public SeguridadFTP Seguridad { get; set; } + public bool Pasivo { get; set; } + public int Timeout { get; set; } + public string Usuario { get; set; } + public string Contraseña { get; set; } + public int Reintentos { get; set; } + public ServidorFTP(string Servidor, int Puerto, string Usuario, string Contraseña, SeguridadFTP Seguridad = SeguridadFTP.Ninguna, bool Pasivo = false, int timeout = 20000, int Reintentos = 3) + { + this.Servidor = Servidor; + this.Puerto = Puerto; + this.Seguridad = Seguridad; + this.Pasivo = Pasivo; + Timeout = timeout; + this.Usuario = Usuario; + this.Contraseña = Contraseña; + this.Reintentos = Reintentos; + } + } + + public enum SeguridadFTP + { + Ninguna = 0, + Implicita = 1, + Explicita = 2, + ExplicitaConControl = 3, + ExplicitaControlOpcional = 4, + SoloControl = 5, + SoloDatos = 6 + } +} \ No newline at end of file diff --git a/tsFluentFTP.NET.csproj b/tsFluentFTP.NET.csproj new file mode 100644 index 0000000..045e2d2 --- /dev/null +++ b/tsFluentFTP.NET.csproj @@ -0,0 +1,27 @@ + + + + net8.0 + enable + enable + tsFluentFTPNET + tsFluentFTPNET + net 8.0, libreria + Library + tsFluentFTPNET + 1.0.0 + davrod + Tecnosis S.A + Utilidades FTP seguro. + + - Primera versión. + - Comprobar porque se han hecho bastantes cambios respecto al anterior. + + + + + + + + + diff --git a/tsFluentFTP.NET.sln b/tsFluentFTP.NET.sln new file mode 100644 index 0000000..6ce0b0e --- /dev/null +++ b/tsFluentFTP.NET.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.13.35828.75 d17.13 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "tsFluentFTP.NET", "tsFluentFTP.NET.csproj", "{C71E170C-132F-4B0A-B258-CED77E28FCFC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C71E170C-132F-4B0A-B258-CED77E28FCFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C71E170C-132F-4B0A-B258-CED77E28FCFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C71E170C-132F-4B0A-B258-CED77E28FCFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C71E170C-132F-4B0A-B258-CED77E28FCFC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F52C8741-810E-4BB8-BA70-71221C2BADD6} + EndGlobalSection +EndGlobal