posts - 315, comments - 268, trackbacks - 15

My Links

News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro

Tag Cloud

Article Categories

Archives

Post Categories

Blogs amici

Links

FTP: Download/Upload di un file con ProgressBar

Post nato da discussione su forum. Supponiamo di voler creare un client ftp (applicazione Windows Form) per il download/upload di file, utilizzando un controllo ProgressBar per visualizzare lo stato di avanzamento dell'operazione. Grazie alle classi messe a disposizione del Framework .Net, il codice per il download di un file remoto, potrebbe essere del tipo:

1 //Connessione con l'host 2 Connect(remotePathFile); 3 4 //Imposta il tipo di richiesta 5 _conn.Method = WebRequestMethods.Ftp.DownloadFile; 6 7 //Ottiene la risposta 8 _resp = (FtpWebResponse)(_conn.GetResponse()); 9 System.IO.Stream _respStream = _resp.GetResponseStream(); 10 11 if (ContinueProcess(_resp.StatusDescription)) 12 { 13 //Apre il file locale per la scrittura 14 //.... 15 16 try 17 { 18 //Recupera la dimensione del file come numero di bytes 19 Int64 totalBytes = GetFileSize(remotePathFile); 20 Int64 totalBytesRead = 0; 21 22 if (downloadFileStarted != null) downloadFileStarted(totalBytes); 23 24 byte[] buf = new byte[1024]; 25 26 int bytesRead = _respStream.Read(buf, 0, buf.Length); 27 28 while (bytesRead != 0) 29 { 30 totalBytesRead += bytesRead; 31 32 if (downloadFileProgress != null) downloadFileProgress(totalBytes, totalBytesRead); 33 34 fileStream.Write(buf, 0, bytesRead); 35 36 bytesRead = _respStream.Read(buf, 0, buf.Length); 37 } 38 39 if (downloadFileCompleted != null) downloadFileCompleted(); 40 41 return true; 42 } 43 catch (WebException ex) 44 { 45 //..... 46 } 47 finally 48 { 49 fileStream.Close(); 50 _respStream.Close(); 51 } 52 } 53 else ... 54 }

mentre il codice per eseguire l'upload, potrebbe essere del tipo:

1 if (Connect(remoteFilePath)) 2 { 3 try 4 { 5 //Connected 6 _conn.Method = WebRequestMethods.Ftp.UploadFile; 7 8 FileInfo file = new FileInfo(localFilePath); 9 10 if (file.Length > 0) 11 { 12 if (uploadFileStarted != null) uploadFileStarted(file.Length); 13 14 Stream strUpload = _conn.GetRequestStream(); 15 16 int bytesRead = 0; 17 int totalBytesRead = 0; 18 byte[] fileBytes = new byte[1024]; 19 20 FileStream strLocalFile = new FileStream(localFilePath, FileMode.Open); 21 bytesRead = strLocalFile.Read(fileBytes, 0, fileBytes.Length); 22 23 while (bytesRead != 0) 24 { 25 totalBytesRead += bytesRead; 26 27 strUpload.Write(fileBytes, 0, bytesRead); 28 29 if (uploadFileProgress != null) uploadFileProgress(file.Length, totalBytesRead); 30 31 bytesRead = strLocalFile.Read(fileBytes, 0, fileBytes.Length); 32 } 33 34 strLocalFile.Close(); 35 strUpload.Close(); 36 37 if (uploadFileCompleted != null) uploadFileCompleted(); 38 } 39 } 40 catch (WebException ex) {...} 41 catch (Exception ex) { ...} 42 } 43 else{...}

Nulla di particolare, tranne che, sia per l'upload che per il download, il file viene inviato/scaricato un blocco per volta, nell'esempio di dimensione massima di 1024 Byte.

In allegato, un'applicazione Windows Form molto semplice.

image

Le operazioni di download/upload sono eseguite su un thread diverso da quello principale.

Codice allegato

Technorati Tag: ,,,

Print | posted on domenica 2 novembre 2008 12:02 | Filed Under [ C# ]

Feedback

Gravatar

# re: FTP: Download/Upload di un file con ProgressBar

@Silvio
Ti ho risposto in privato.
20/11/2008 20:18 | Pietro Libro
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET