Pues eso… un artículillo "tesnico" para que no digas..
Esto lo publico a raíz de una pregunta en mis foros… y más que nada porque pensaba que ya lo tenía publicado, pero se ve que no… ya que tenía un ejemplo para acceder a un servidor FTP pero sólo para listar el contenido de un directorio FTP.
La cuestión es que en realidad ese código que publiqué con un par de añadidos sirve para poder descargar un archivo (o fichero) de un directorio FTP y aquí te los mostraré tanto para Visual Basic.NET como para Visual C#.
La clase en cuestión que nos sirve para hacer esto que te comento es FtpWebRequest que está definida en el espacio de nombres System.Net.
Y sin más preámbulos (ni rollos) aquí tienes el código de VB y C#.
¡Que lo descargues bien!
Código de VB
'------------------------------------------------------------------------------ ' Descargar archivos de un FTP (06/Dic/11) ' ' ©Guillermo 'guille' Som, 2011 '------------------------------------------------------------------------------ Option Strict On Option Infer On Imports System Imports System.Net Imports System.IO Imports System.Text Module Module1 Sub Main() ' En este ejemplo usamos un FTP público y anónimo ' pero puedes indicar el que quieras descargarFic("ftp://ftp.rediris.es/welcome.msg", _ "anonimous@nadie.com", "", _ "E:\pruebas2") Console.WriteLine("descargado") Console.ReadLine() End Sub Private Sub descargarFic(ByVal ficFTP As String, _ ByVal user As String, ByVal pass As String, _ dirLocal As String) Dim dirFtp As FtpWebRequest = CType(FtpWebRequest.Create(ficFTP), FtpWebRequest) ' Los datos del usuario (credenciales) Dim cr As New NetworkCredential(user, pass) dirFtp.Credentials = cr ' El comando a ejecutar usando la enumeración de WebRequestMethods.Ftp dirFtp.Method = WebRequestMethods.Ftp.DownloadFile ' Obtener el resultado del comando Dim reader As New StreamReader(dirFtp.GetResponse().GetResponseStream()) ' Leer el stream (el contenido del archivo) Dim res As String = reader.ReadToEnd() ' Mostrarlo. 'Console.WriteLine(res) ' Guardarlo localmente con la extensión .txt Dim ficLocal As String = Path.Combine(dirLocal, Path.GetFileName(ficFTP) & ".txt") Dim sw As New StreamWriter(ficLocal, False, Encoding.Default) sw.Write(res) sw.Close() ' Cerrar el stream abierto. reader.Close() End Sub Sub listarFTP(ByVal dir As String, ByVal user As String, ByVal pass As String) Dim dirFtp As FtpWebRequest = CType(FtpWebRequest.Create(dir), FtpWebRequest) ' Los datos del usuario (credenciales) Dim cr As New NetworkCredential(user, pass) dirFtp.Credentials = cr ' El comando a ejecutar dirFtp.Method = "LIST" ' También usando la enumeración de WebRequestMethods.Ftp dirFtp.Method = WebRequestMethods.Ftp.ListDirectoryDetails ' Obtener el resultado del comando Dim reader As New StreamReader(dirFtp.GetResponse().GetResponseStream()) ' Leer el stream Dim res As String = reader.ReadToEnd() ' Mostrarlo. Console.WriteLine(res) ' Cerrar el stream abierto. reader.Close() End Sub End Module
Código de C#
//----------------------------------------------------------------------------- // Descargar archivos de un FTP (06/Dic/11) // // ©Guillermo 'guille' Som, 2011 //----------------------------------------------------------------------------- using System; using System.Text; using System.Net; using System.IO; namespace descargar_archivos_FTP_cs { class Program { static void Main(string[] args) { descargarFic("ftp://ftp.rediris.es/welcome.msg", "anonimous@nadie.com", "", @"E:\pruebas2"); Console.WriteLine("descargado"); Console.ReadLine(); } static void descargarFic(string ficFTP, string user, string pass, string dirLocal) { FtpWebRequest dirFtp = ((FtpWebRequest)FtpWebRequest.Create(ficFTP)); // Los datos del usuario (credenciales) NetworkCredential cr = new NetworkCredential(user, pass); dirFtp.Credentials = cr; // El comando a ejecutar usando la enumeración de WebRequestMethods.Ftp dirFtp.Method = WebRequestMethods.Ftp.DownloadFile; // Obtener el resultado del comando StreamReader reader = new StreamReader(dirFtp.GetResponse().GetResponseStream()); // Leer el stream string res = reader.ReadToEnd(); // Mostrarlo. //Console.WriteLine(res); // Guardarlo localmente con la extensión .txt string ficLocal = Path.Combine(dirLocal, Path.GetFileName(ficFTP) + ".txt"); StreamWriter sw = new StreamWriter(ficLocal, false, Encoding.UTF8); sw.Write(res); sw.Close(); // Cerrar el stream abierto. reader.Close(); } static void listarFTP(string dir, string user, string pass) { FtpWebRequest dirFtp = ((FtpWebRequest)FtpWebRequest.Create(dir)); // Los datos del usuario (credenciales) NetworkCredential cr = new NetworkCredential(user, pass); dirFtp.Credentials = cr; // El comando a ejecutar dirFtp.Method = "LIST"; // También usando la enumeración de WebRequestMethods.Ftp dirFtp.Method = WebRequestMethods.Ftp.ListDirectoryDetails; // Obtener el resultado del comando StreamReader reader = new StreamReader(dirFtp.GetResponse().GetResponseStream()); // Leer el stream string res = reader.ReadToEnd(); // Mostrarlo. Console.WriteLine(res); // Cerrar el stream abierto. reader.Close(); } } }
Nos vemos.
Guillermo
…