Uygulamamızda internet üzerinden dosya indirme ihtiyacı duyduğumuzda kullanabileceğimiz sınıflardan bir taneside System.Net.WebClient sınıfıdır. Bu yazıda bu sınıfı kullanarak bir web sitesinden dosya indirmeyi anlatmaya çalışacağım.
Uygulamayı bir windows forms uygulaması olarak geliştireceğiz.
Bunun için Visual Studio üzerinde yeni bir proje oluşturdum ve karşıma gelen Form1.cs üzerinde işlemleri yapıyorum.
Dizayn için gerekenler :
1 Windows form (Form1.cs)
1 TextBox (textBox1)
1 Button (button1)
1 ProgressBar (progressBar1)
son olarakta bir Label (label1)

TextBox içine yazılan web adresindeki içeriği indirip açan, indirirkende durumu progressbarda gösteren ve label içerisinde kaç kb inmiş kaç kb kalmış gösteren bir program yazmayı hedefliyoruz.
Hiç vakit kaybetmeden button1_click olayını yakalayıp kodlarımızı yazmaya başlıyoruz:
string myLocalFilePath;
private void button1_Click(object sender, EventArgs e)
{
#region DosyaIsmi
string[] pathArray = textBox1.Text.Split('/');
if(pathArray.Length == 0)
{
MessageBox.Show("Lütfen Düzgün bir web adresi giriniz");
return;
}
string fileName = pathArray[pathArray.Length - 1];
myLocalFilePath = Application.StartupPath + fileName;
#endregion
WebClient myClient = new WebClient();
myClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(myClient_DownloadProgressChanged);
myClient.DownloadFileCompleted += new AsyncCompletedEventHandler(myClient_DownloadFileCompleted);
Uri myWebAddress = new Uri(textBox1.Text);
myClient.DownloadFileAsync(myWebAddress,myLocalFilePath);
}
Burda yaptıklarımızı kısaca açıklamak gerekirse öncelikle methodun dışında, indirilecek olan dosyanın yolunu tutmak için bir field oluşturuyoruz, bu bize daha sonra lazım olacak.
Öncelikle, dosyanın bizim harddisk’imizdeki ismini kullanıcıya sormadığımız için, verilen web adresi üzerinden / ile başlayan son string ifadeyi alıyoruz. Bu arada ufak bir kontrol ile bunun bir web adresi olup olmadığını da, anlıyor ve gerekirse kullanıcıya uyarı veriyoruz.
Daha sonra WebClient class’ından bir örnek oluşturup DownloadProgressChanged ve DownloadFileCompleted event larını yakalıyoruz.
Kullanıcının bize textBox1 ile gönderdiği değeri Uri classından bir örnek oluşturup varsayılan yapıcı(default contructor) methodu na gönderiyoruz.
Ve son olarak da oluşturduğumuz WebClient örneğimizin DownloadFileAsync methodunun (Uri fileAddress,string localFilePath) parametrelerini alan overload’unu elimizde bulunan myWebAddress ve myLocalFilePath değişkenlerimizi göndererek işletiyoruz.
Asenkron dosya böylece webClient ımız tarafından indirilmeye başlanıyor. Durum değişim (ProgressChanged) ve Dosya tamamlanma (FileCompleted) olaylarının tetikleyeceği methodlarıda aşağıdaki şekilde yazarak programımızı çalışmaya hazır hale getiriyoruz.
void myClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
DialogResult dr = MessageBox.Show("Dosya indirme başarıyla gerçekleşti, Dosyayı açmak istermisiniz ?","Dosya indirildi",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
if(dr == System.Windows.Forms.DialogResult.Yes)
{
System.Diagnostics.Process.Start(myLocalFilePath);
}
}
void myClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label1.Text = String.Format("{0} / {1} Kb", (e.BytesReceived/1024), (e.TotalBytesToReceive/1024));
}
Yazıda bulunan örnek kod (Zip)