/// <summary> Descargar un fichero al servidor Ftp. </summary> /// /// <param name="remoteFile"> Nombre del fichero remoto. </param> /// <param name="localFile"> Nombre del fichero local. </param> /// <param name="crearFichero"> Sobreescribir destino si ya existe. </param> /// /// <returns> Resultado (S/N/C) </returns> /// public Char FtpDownloadFile(string remoteFile, string localFile, int crearFichero = (int)FileMode.Create) { FileStream localFileStream; byte[] byteBuffer; int bytesLeidos; Resultado = 'N'; try { if (String.IsNullOrEmpty(FTPHost) || string.IsNullOrEmpty(FTPUser) || FTPPwd == null) { UsrError = "KO - Faltan parámetros de conexión al Host Ftp"; UsrErrorC = -1; Resultado = 'N'; return(Resultado); } // Conexión con el Host Ftp. FtpRequest = (FtpWebRequest)FtpWebRequest.Create(FTPHost + "/" + remoteFile); FtpRequest.Credentials = new NetworkCredential(FTPUser, FTPPwd); FtpRequest.Method = WebRequestMethods.Ftp.DownloadFile; // Canal de comunicación con el Host Ftp. FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); // Retorno de comunicación con el Host Ftp. FtpFileStream = FtpResponse.GetResponseStream(); // Canal de comunicación con el fichero local. localFileStream = new FileStream(localFile, FileMode.Create); byteBuffer = new byte[_BYTE_BUFFER]; // Leer datos del fichero remoto y grabar en fichero local. bytesLeidos = FtpFileStream.Read(byteBuffer, 0, _BYTE_BUFFER); while (bytesLeidos > 0) { localFileStream.Write(byteBuffer, 0, _BYTE_BUFFER); bytesLeidos = FtpFileStream.Read(byteBuffer, 0, _BYTE_BUFFER); } // Cerrar canales de comunicación Ftp. localFileStream.Close(); FtpFileStream.Close(); FtpRequest = null; FtpResponse.Close(); Resultado = 'S'; UsrError = "OK"; } catch (Exception ex) { // Error de Ftp. UsrErrorC = ex.HResult; UsrError = ex.Message; UsrErrorE = ex.StackTrace; Resultado = 'C'; } return(Resultado); }
//------------------------------------------------------------------ // Métodos públicos de la clase. //------------------------------------------------------------------ /// <summary> /// /// </summary> /// <param name="remoteFile"> Nombre del fichero remoto. </param> /// /// <returns> Resultado (S/N/C) </returns> /// public Char FtpFileExists(string remoteFile) { // string fileInfo; Innecesario. Resultado = 'N'; try { if (String.IsNullOrEmpty(FTPHost) || string.IsNullOrEmpty(FTPUser) || FTPPwd == null) { UsrError = "KO - Faltan parámetros de conexión al Host Ftp"; UsrErrorC = -1; Resultado = 'N'; return(Resultado); } FtpRequest = (FtpWebRequest)FtpWebRequest.Create(FTPHost + "/" + remoteFile); FtpRequest.Credentials = new NetworkCredential(FTPUser, FTPPwd); FtpRequest.Method = WebRequestMethods.Ftp.GetDateTimestamp; // Canal de comunicación con el Host Ftp. FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); // Retorno de comunicación con el Host Ftp. FtpFileStream = FtpResponse.GetResponseStream(); // Canal de lectura del Host Ftp. - Innecesario. // FtpStreamReader = new StreamReader(FtpFileStream); // fileInfo = FtpStreamReader.ReadToEnd(); // Cerrar canales de comunicación Ftp. FtpFileStream.Close(); FtpRequest = null; FtpResponse.Close(); Resultado = 'S'; UsrError = "OK"; } catch (WebException ex) when(ex.Status.ToString() == "ProtocolError") { // Error de Ftp. UsrErrorC = ex.HResult; UsrError = ex.Message; UsrErrorE = ex.StackTrace; Resultado = 'N'; } catch (Exception ex) { // Error de programa. UsrErrorC = ex.HResult; UsrError = ex.Message; UsrErrorE = ex.StackTrace; Resultado = 'C'; } return(Resultado); }