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