Home / Programmazione / C# - Asp.NET / Download file in C#
Mattepuffo

Download file in C#

Download file in C#

Ebbene si, questa categoria non è morta, anche se non ci scrivo da tempo.

Purtroppo non riesco a seguire tutti i linguaggi come vorrei...

Oggi vediamo due metodi per fare il download dei file dal web, uno sincrono e uno asincrono, in C#.

In entrambi i casi useremo l'oggetto WebClient.

Cominciamo dal primo:

using System;
using System.Net;

namespace Cimoda
{
    public class Download
    {
        public static void downloadSync()
        {
            var webClient = new WebClient();
            webClient.DownloadFile("http://www.sito.com/file.xml", @"C:\file.xml");
        }
    }
}

Come vedete basta usare il metodo DownloadFile, indicando il file da scaricare e dove scaricarlo.

Questo metodo, però, viene eseguito nel thread principale, ed è quindi bloccante.

Possiamo quindi usare un metodo asincrono; ecco un esempio di base:

using System;
using System.Net;

namespace Cimoda
{
    public class Download
    {      
        public static void downloadAsync()
        {
            var webClient = new WebClient();
            webClient.DownloadFileAsync(new Uri("http://www.sito.com/file.xml"), @"C:\file.xml");
        }
    }
}

In questo caso usiamo il metodo DownloadFileAsync, che prende come primo parametro un oggetto Uri e non uno string; il secondo rimane uguale.

Possiamo ottenere di più, però, se vogliamo:

private static void OnButtonDownloadClick(object sender, EventArgs e)
{
  WebClient webClient = new WebClient();
  webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
  webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
  webClient.DownloadFileAsync(new Uri("http://www.sito.com/file.xml"), @"C:\file.xml");
}

private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
  progressBar.Value = e.ProgressPercentage;
}

private void Completed(object sender, AsyncCompletedEventArgs e)
{
  MessageBox.Show("Download completed!");
}

In questo caso riempiamo una progress bar (che dovete aggiungere alla vostra finestra) durante l'esecuzione, e alla fine lanciamo un MessageBox.

Nel complesso tutto molto semplice!

Ciao!