Archivo de la etiqueta: FTP

Descargar archivos de un FTP

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