Home / Programmazione / C# - Asp.NET / Download files da FTP in C#
Mattepuffo

Download files da FTP in C#

Download files da FTP in C#

In questo articolo abbiamo visto come connettersi a un server FTP tramite C#, e come listare tutti i files presenti in una directory.

Adesso, partendo da quella classe, useremo il metodo listFiles per creare tutta la lista dei files da scaricare.

In sostanza creeremo un altro metodo che prenderà quella lista e scaricherà i files in locale.

Alla classe aggiungete questo metodo:

public void downloadOnLocal(string file)
        {
            try
            {
                Uri uri = new Uri(strUri);
                if (uri.Scheme != Uri.UriSchemeFtp)
                {
                    return;
                }
                FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(strUri + file);
                request.UseBinary = true;
                request.Credentials = new NetworkCredential(user, password);
                request.Method = WebRequestMethods.Ftp.DownloadFile;
                request.Proxy = null;
                request.KeepAlive = false;
                request.UsePassive = true;
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                FileStream fs = new FileStream(@"C:\txt_cronos\" + file, FileMode.Create);
                int lenght = 2048;
                Byte[] buffer = new Byte[lenght];
                int bytesRead = stream.Read(buffer, 0, lenght);
                while (bytesRead > 0)
                {
                    fs.Write(buffer, 0, bytesRead);
                    bytesRead = stream.Read(buffer, 0, lenght);
                }
                fs.Close();
                stream.Close();
                stream.Flush();
                response.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

Il metodo accetta un parametro di tipo string, che corrisponde al file da scaricare.

Il primo pezzo è praticamente uguale.

Più sotto prendiamo la risposta del server, e con un oggetto FileStream scarichiamo il file in una directory locale.

Il tutto viene fatto attraverso oggetti Stream e FileStream.

Nel main avremmo una cosa del genere:

            FtpAmoda ftp = new FtpAmoda();
            string[] files = ftp.listFiles();
            foreach(string f in files)
            {
                ftp.downloadOnLocal(f);
            }
            Console.WriteLine("DOWNLOAD DEI FILES IN LOCALE ESEGUITO");

Cicliamo sulla lista dei files e lo scarichiamo.

Anche se sicuramente si potrebbero ottimizzare i due metodi, funziona bene ed è anche abbastanza veloce!