C# Dersleri 50 - WebClient İle Dosya Ve String İndirme

     C# dilinde System.Net namespace'inde bulunan WebClient classı, projelerimizde sıklıkla kullandığımız classlardan birisi. Bu classı; bir url üzerinden xml / json data çekmek istediğinizde, uzak sunucudan dosyalar çekmek istediğinizde, hatta bir websitenin html çıktısını çekip kullanacak bir bot yazmak istediğinizde kullanabilirsiniz.

     C# İle Bir Websitenin Html Çıktısına Ulaşmak     

private void btnClick_Click(object sender, EventArgs e)
{
    WebClient wc = new WebClient();
    string html = wc.DownloadString("http://www.google.com");

    txtHtml.Text = html;
}

     WebClient classının wc adında yeni bir nesnesini oluşturuyoruz. WebClient classının DownloadString() methodu, verilen url'deki datayı çekmemizi sağlar. Buradaki örnekte www.google.com anasayfasının Html çıktısını çekip bir textbox'a yazdırıyoruz.

     Eğer Google anasayfasındayken boş bir yere sağ tıklayıp "Sayfa Kaynağını Görüntüle" derseniz(Ctrl + U), WebClient aracılığıyla textbox'a çektiğimiz datayı görebilirsiniz. DownloadString() methodu genel olarak bunu yapar; bir web sayfanın sayfa kaynağını görüntülediğinizde önünüze gelen Html çıktıya ulaşmanızı sağlar.

C# Webclient Classının DownloadString Method Kullanımı

     C# İle Dosya İndirmek

     C# ile uzak sunucudaki bir dosyayı lokal bilgisayara indirmek istediğimizde WebClient classının DownloadFileAsync() methodunu kullanabiliriz. Bu methodun en çok kullanılan overloadu 2 parametre alır. Bunlardan ilki indirilecek dosyanın adresi, ikincisi ise lokal bilgisayarda kaydedileceği adres. Bu method, adından da anlaşılabileceği üzere asenkron çalışır yani dosya indirme işlemi sırasında diğer işlemlerimizi durdurmaz. Kısaca bu method, indirme işlemi için ayrı bir Thread oluşturur. Eğer Thread'lerin çalışma mantığıyla ilgili pek bir bilginiz yoksa bu makaleye bir göz atmanızı tavsiye ederim.     

private void btnClick_Click(object sender, EventArgs e)
{
    WebClient wc = new WebClient();
    wc.DownloadFileAsync(new Uri("http://download.thinkbroadband.com/10MB.zip"), "D:/10mb.zip");
    wc.DownloadProgressChanged += Wc_DownloadProgressChanged;
    wc.DownloadFileCompleted += Wc_DownloadFileCompleted;
}

private void Wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    lblProgress.Text = "İndirilen : %" + e.ProgressPercentage; 
}

private void Wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
    MessageBox.Show("İndirme İşlemi Tamamlandı");
}

     İndirmenin hangi aşamada olduğunu görmek ya da tamamlandığında işlemler yapmak istersek WebClient classının bazı eventlerini kullanabiliriz. Öncelikle event nedir ne işe yarar diyorsanız bu makaleye göz atabilirsiniz. Eğer indirmenin hangi aşamada olduğunu görmek istiyorsak, WebClient classının "DownloadProgressChanged" eventini kullanabiliriz. İndirilen yüzde değer değiştikçe bu event tetiklenecektir. Biz de bu event her tetiklendiğinde label değerini değiştiriyoruz. İndirme işlemi bittiğinde işlem yapacaksanız eğer "DownloadFileCompleted" eventini kullanabilirsiniz.

     Projenin tamamını buradan indirebilirsiniz.

YORUMLAR
Email Adresi *
Görüntülenecek İsim *
Yorum *
Paylaş
  • f