el Guille, la Web del Visual Basic, C#, .NET y más...

Acceder al contenido de un FTP

 
Publicado el 04/Abr/2008
Actualizado el 04/Abr/2008
Autor: Guillermo 'guille' Som

Ejemplo de cómo acceder a un FTP usando las clases de System.Net y ejecutar comandos (con código de ejemplo para Visual Basic y C#).



 

Introducción:

Estos ejemplos son de los cursos de Visual Basic 2005 y Visual C# 2005 que escribí para Microsoft y que están disponibles en la Web de MSDN España.

Si quieres ver el contenido de los cursos de MSDN para Visual Studio 2005 (y bajarte el código e incluso el texto), hazlo desde este link.

 

Acceder a un servidor FTP

Por medio de la clase FtpWebRequest podemos acceder a una dirección FTP de forma bastante fácil, como es habitual en este tipo de clases, este objeto se crea mediante el método compartido Create, al que le debemos pasar la dirección FTP a la que queremos acceder.

Debido a que los sitios FTP pueden estar protegidos por contraseña, es posible que necesitemos asignar la propiedad Credentials de este objeto, esto lo podemos hacer asignando el objeto creado a partir de la clase NetworkCredential.

Los distintos comandos que necesitemos enviar al FTP lo haremos mediante la propiedad Method.

A este método le podemos asignar una cadena o bien usar los valores de la enumeración WebRequestMethods.Ftp.

Por ejemplo para listar los datos del FTP (equivalente al comando LIST), usaríamos: ListDirectoryDetails.

En la siguiente tabla puedes ver los comandos que se pueden asignar a Method y sus equivalencias con los comandos del protocolo FTP (obtenidos de la documentación de Visual Studio: http://msdn2.microsoft.com/es-es/library/ms144320(VS.85).aspx, salvo la descripción de GetDateTimestamp que en la documentación está en blanco).

Nombre Descripción
AppendFile Representa el método de protocolo FTP APPE, utilizado para anexar un archivo a un archivo existente en un servidor FTP.
DeleteFile Representa el método de protocolo FTP DELE, utilizado para eliminar un archivo en un servidor FTP.
DownloadFile Representa el método de protocolo FTP RETR, utilizado para descargar un archivo de un servidor FTP.
GetDateTimestamp Representa el método de protocolo FTP MDTM, (supongo que para recuperar la fecha y hora del fichero)
GetFileSize Representa el método de protocolo FTP SIZE, utilizado para recuperar el tamaño de un archivo en un servidor FTP.
ListDirectory Representa el método de protocolo FTP NLIST, que obtiene una lista corta de los archivos de un servidor FTP.
ListDirectoryDetails Representa el método de protocolo FTP LIST, que obtiene una lista detallada de los archivos de un servidor FTP.
MakeDirectory Representa el método de protocolo FTP MKD, que crea un directorio en un servidor FTP.
PrintWorkingDirectory Representa el método de protocolo FTP PWD, que imprime el nombre del directorio de trabajo actual.
RemoveDirectory Representa el método de protocolo FTP RMD, que quita un directorio.
Rename Representa el método de protocolo FTP RENAME, que cambia el nombre de un directorio.
UploadFile Representa el método de protocolo FTP STOR, que carga un archivo a un servidor FTP.
UploadFileWithUniqueName Representa el protocolo FTP STOU, que carga un archivo con un nombre único a un servidor FTP.

 

En el siguiente ejemplo utilizamos la clase FtpWebRequest para listar el contenido de un directorio FTP público.

Código para Visual Basic 2005 o superior:

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

Código para Visual C# 2005 o superior:

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();
}

 

Para usar este método simplemente le indicamos el FTP al que queremos acceder así como los datos del usuario.
En este ejemplo es para acceder a un FTP público que no requiere un usuario en concreto, por tanto, indicamos simplemente unos datos ficticios.

Sub Main()
    ' Si este FTP no funciona, prueba con otro ;-)))
    listarFTP("ftp://ftp.rediris.es", "[email protected]", "")

    Console.ReadLine()
End Sub

 

static void Main()
{
    // Si este FTP no funciona, prueba con otro ;-)))
    listarFTP("ftp://ftp.rediris.es", "[email protected]", "");
    
    Console.ReadLine();
}

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo

 


Espacios de nombres usados en el código de este artículo:

System.IO
System.Net
 



 


La fecha/hora en el servidor es: 22/12/2024 17:26:35

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024