C# a fondo: Las clases System.Net.FtpWebRequest y System.Net.FtpWebResponse
El espacio de nombres System.Net del .NET Framework proporciona una interfaz de programación sencilla para muchos de los protocolos que se utilizan en las redes.
La clase FtpWebRequest implementa un cliente FTP.
La clase FtpWebResponse encapsula la respuesta de un servidor de FTP a una solicitud.
La clase WebRequestMethods.Ftp representa los tipos de métodos del protocolo FTP que se pueden utilizar con una solicitud FTP.
Veamos un ejemplo de trabajo con un servidor FTP usando estas clases que nos brinda el .NET Framework, en concreto las operaciones de subida, listado, descarga y borrado de ficheros.
Espacios de nombres
using System.IO;
using System.Net;
Código común a las distintas operaciones
const string server = "ftp://localhost/";
static NetworkCredential credentials = new NetworkCredential("ftpuser", "ftppw");
const string document = "Documento.pdf";
static string uploads = Environment.CurrentDirectory + @"\Subidas\";
static string downloads = Environment.CurrentDirectory + @"\Descargas\";
static void Main(string[] args)
{
UploadFile();
ListDirectory();
DownloadFile();
DeleteFile();
}
Subida de archivo
public static void UploadFile()
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(server + document);
request.Credentials = credentials;
request.Method = WebRequestMethods.Ftp.UploadFile;
byte[] content = File.ReadAllBytes(uploads + document);
request.ContentLength = content.Length;
Stream stream = request.GetRequestStream();
stream.Write(content, 0, content.Length);
stream.Close();
}
Listado de contenido de directorio
public static void ListDirectory()
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(server);
request.Credentials = credentials;
request.Method = WebRequestMethods.Ftp.ListDirectory;
using (StreamReader reader = new StreamReader(((FtpWebResponse)request.GetResponse()).GetResponseStream()))
{
Console.WriteLine(reader.ReadToEnd());
reader.Close();
}
Console.Read();
}
Descarga de archivo
public static void DownloadFile()
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(server + document);
request.Credentials = credentials;
request.Method = WebRequestMethods.Ftp.DownloadFile;
using (MemoryStream stream = new MemoryStream())
{
((FtpWebResponse)request.GetResponse()).GetResponseStream().CopyTo(stream);
File.WriteAllBytes(downloads + document, stream.ToArray());
}
}
Borrado de archivo
public static void DeleteFile()
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(server + document);
request.Credentials = credentials;
request.Method = WebRequestMethods.Ftp.DeleteFile;
request.GetResponse();
}
Para finalizar, el código en un proyecto de ejemplo de Visual Studio 2010 como fichero adjunto.
Referencia:
System.Net (Espacio de nombres)
FtpWebRequest (Clase)
FtpWebResponse (Clase)
WebRequestMethods.Ftp (Clase)