Archive | Styczeń 2013

.NET i FTP.

Pobieranie pliku z serwera FTP:

var request = FtpWebRequest.Create(ftpServer) as FtpWebRequest;
setCredentials(request);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();

using (var destStream = new System.IO.BufferedStream(System.IO.File.Create(destinationFile)))
using (var srcStream = new System.IO.BufferedStream(response.GetResponseStream()))
{
  // Odczyt z srcStream i zapis do destStream
}

BufferedStream zapewnia elegancki sposób pobierania i zapisywania danych. Wewnątrz using, można operować na pojedynczych bajtach. Jednak odczyt z serwera FTP i zapis do pliku odbywa się w blokach danych – właśnie dzięki BufferedStream.

A co jeśli chcielibyśmy pokazać zaawansowanie operacji pobierania? Do tego potrzebujemy wielkości pliku. Niestety każda próba pobrania wielkości danych ze strumienia response.GetReponseStream() kończy się mało przyjemnym wyjątkiem. Szczęśliwie jest inna droga:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer);
request.Method = WebRequestMethods.Ftp.GetFileSize;
setCredentials(request);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
long fileSize = response.ContentLength;
Reklamy