[MAKALE] - Download Programı Yapmak

eSa

Dekan
Yasaklı
Bu makalede, basit ama etkili bir download programının nasıl yapılacağını göreceğiz.
Yeni bir boş proje formu açarak, menüden Add User Control ile yeni bir usercontrolu projemize ekliyoruz.








Eklediğimiz usercontrolun özelliklerinden ismini downloader yapıp, üzerine de image nesnesi ile ufak bir icon yerleştirtim. Böylelikle oluşturduğumuz usercontrolu formumuza eklediğimizde yeri belli olsun.


Usercontrolun üzerinde çift tıklayarak içine giriyoruz. ve aşağıdaki kodu olduğu gibi bu kısma ekleyelim.



Kod:
[COLOR=#0000cd]Public Event[/COLOR] DownloadProgress(CurBytes [COLOR=#0000cd]As Long[/COLOR], MaxBytes[COLOR=#0000cd] As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]Public Event[/COLOR] DownloadComplete(MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]Public Event[/COLOR] DownloadCancelled(CurBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
 
[COLOR=#0000cd]Private [/COLOR]uFileName [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Public [/COLOR]ilabel[COLOR=#0000cd] As Long[/COLOR]
[COLOR=#0000cd]Public [/COLOR]FileSizeWithMB [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Public [/COLOR]FileSizeWithKB [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Dim [/COLOR]FileNO [COLOR=#0000cd]As Long[/COLOR], BytesPos[COLOR=#0000cd] As Long[/COLOR]
[COLOR=#0000cd]Public Event [/COLOR]DownloadError(SaveFile [COLOR=#0000cd]As String[/COLOR], strError[COLOR=#0000cd] As String[/COLOR])
 


[COLOR=#0000cd]Private Sub[/COLOR] UserControl_AsyncReadComplete(AsyncProp [COLOR=#0000cd]As [/COLOR]AsyncProperty)
 [COLOR=#0000cd]On Error GoTo[/COLOR] errlabel
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadComplete(AsyncProp.BytesMax, uFileName)
    [COLOR=#0000cd]Close [/COLOR]#FileNO
 
 
[COLOR=#0000cd] Exit Sub[/COLOR]
errlabel:
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
 Err.Clear
 [COLOR=#0000cd]Close [/COLOR]#FileNO
  
[COLOR=#0000cd]End Sub[/COLOR]
 
[COLOR=#0000cd]Private Sub[/COLOR] UserControl_AsyncReadProgress(AsyncProp [COLOR=#0000cd]As [/COLOR]AsyncProperty)
[COLOR=#0000cd] On Error GoTo[/COLOR] AsyncReadProgressERR
  
 [COLOR=#0000cd]Dim [/COLOR]tempFileSize [COLOR=#0000cd]As String[/COLOR]
 tempFileSize = CStr(AsyncProp.BytesMax / 1024)
 FileSizeWithKB = Mid(tempFileSize, 1, InStr(1, tempFileSize, ".") + 2) & "KB"
 tempFileSize = CStr(AsyncProp.BytesMax / 1024 / 1024)
  
 FileSizeWithMB = Mid(tempFileSize, 1, InStr(1, tempFileSize, ".") + 2) & "MB"
  
 [COLOR=#0000cd]Dim [/COLOR]b() [COLOR=#0000cd]As Byte[/COLOR]
 b = AsyncProp.Value
 [COLOR=#0000cd]For [/COLOR]I = BytesPos To AsyncProp.BytesRead - 1
 Put #FileNO, , b(I)
 [COLOR=#0000cd]Next [/COLOR]I
 BytesPos = AsyncProp.BytesRead
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadProgress(AsyncProp.BytesRead, AsyncProp.BytesMax, uFileName)
 [COLOR=#0000cd]DoEvents[/COLOR]
[COLOR=#0000cd] Exit Sub[/COLOR]
AsyncReadProgressERR:
  
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
 Err.Clear
[COLOR=#0000cd]End Sub[/COLOR]
 
 
[COLOR=#0000cd]Public Sub [/COLOR]BeginDownload([COLOR=#0000cd]ByVal[/COLOR] URL[COLOR=#0000cd] As String[/COLOR], [COLOR=#0000cd]ByVal [/COLOR]FileName[COLOR=#0000cd] As String[/COLOR])
 'filename = target
 uFileName = FileName 'target
 
[COLOR=#0000cd]On Error GoTo[/COLOR] DownloadBeginERR
  
 FileNO = FreeFile()
 [COLOR=#0000cd]Open [/COLOR]FileName [COLOR=#0000cd]For [/COLOR]Binary [COLOR=#0000cd]As [/COLOR]FileNO
 BytesPos = 0
 UserControl.AsyncRead URL, vbAsyncTypeByteArray, FileName, vbAsyncReadForceUpdate
[COLOR=#0000cd] Exit Sub[/COLOR]
DownloadBeginERR:
  
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(FileName, Err.Description)
 Err.Clear
[COLOR=#0000cd]End Sub[/COLOR]
 

[COLOR=#0000cd]Public Sub[/COLOR] DownLoadStop()
   [COLOR=#0000cd] On Error Resume Next[/COLOR]
 UserControl.CancelAsyncRead uFileName 'uTarget
[COLOR=#0000cd]End Sub[/COLOR]




[COLOR=#0000cd]Public Function[/COLOR] CancelAllDownload()[COLOR=#0000cd] As Boolean[/COLOR]
       [COLOR=#0000cd]On Error GoTo[/COLOR] CancelAllDownloadErr
 UserControl.CancelAsyncRead uFileName 'uTarget
    [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadCancelled(BytesPos, uFileName)
    CancelAllDownload = True
    [COLOR=#0000cd]Exit Function[/COLOR]
CancelAllDownloadErr:
    [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
    CancelAllDownload = False
    Err.Clear
[COLOR=#0000cd]End Function[/COLOR]
 
 
[COLOR=#0000cd]Private Sub[/COLOR] UserControl_Resize()
UserControl.Width = ScaleX(32, vbPixels, vbTwips)
UserControl.Height = ScaleY(32, vbPixels, vbTwips)
[COLOR=#0000cd]End Sub[/COLOR]


Usercontroll ile işimiz bitti. Artık oluşan usercontrolu ToolBox ta görebiliyoruz.







Sırada formumuzu oluşturmaya geldi. Boş olan formumuz (Form1) üzerine örnekteki gibi textbox, command1 (İndir), command2(İptal) ,progressbar, label ve tabiki oluşturduğumuz usercontrol (downloader) nesnelerini ekledim.





Download işlemini başlatmak için gerekli olan komutumuz.


Kod:
downloader1.begindownload "URL" , "KAYIT_YERİ_VE_DOSYA_ADI"


Bu aşamada kayıt yapabilmek için, url nin içinden dosyanın adını ve uzantısını almak gerekecekti. Bunun için de ufak bir fonksiyon oluşturdum (GetFileName) . Bunun üzerinde ufak bir değişiklik ile işinize yarayacak ise GetFilePath olarak da düzenleyebilir, yalnızca path i alabilirsiniz.


Kod:
[COLOR=#0000cd]Function[/COLOR] GetFileName([COLOR=#0000cd]ByVal [/COLOR]path [COLOR=#0000cd]As String[/COLOR]) [COLOR=#0000cd]As String[/COLOR]

GetFileName = Mid(StrReverse(path), 1, InStr(1, StrReverse(path), "/") - 1)
GetFileName = StrReverse(GetFileName)

[COLOR=#0000cd]End Function[/COLOR]


Kodlar anlaşılır olduğu için tek tek anlatmak yerine Form1 içinde yazılan kodları bir defada yazıyorum.


Kod:
[COLOR=#0000cd]Private Sub[/COLOR] Command1_Click() '[COLOR=#008000]İndir[/COLOR]
downloader1.BeginDownload Text1.Text, "c:\test\" & GetFileName(Text1.Text)
[COLOR=#0000cd]End Sub[/COLOR]


[COLOR=#0000cd]Private Sub[/COLOR] Command2_Click() '[COLOR=#008000]iptal[/COLOR]
downloader1.DownLoadStop
[COLOR=#0000cd]End Sub[/COLOR]




[COLOR=#0000cd]Private Sub[/COLOR] downloader1_DownloadComplete(MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]MsgBox [/COLOR]"İndirme işlemi tamamlandı.." & vbCrLf & SaveFile & " - " & downloader1.FileSizeWithMB
[COLOR=#0000cd]End Sub[/COLOR]




[COLOR=#0000cd]Private Sub[/COLOR] downloader1_DownloadProgress(CurBytes [COLOR=#0000cd]As Long[/COLOR], MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
Label1.Caption = Format((CurBytes / 1024 / 1024), "0.##MB") & " / " & Format((MaxBytes / 1024 / 1024), "0.##MB")
ProgressBar1.Max = MaxBytes
ProgressBar1.Value = CurBytes


[COLOR=#0000cd]End Sub[/COLOR]




[COLOR=#0000cd]Function[/COLOR] GetFileName([COLOR=#0000cd]ByVal [/COLOR]path [COLOR=#0000cd]As String[/COLOR]) [COLOR=#0000cd]As String[/COLOR]


GetFileName = Mid(StrReverse(path), 1, InStr(1, StrReverse(path), "/") - 1)
GetFileName = StrReverse(GetFileName)


[COLOR=#0000cd]End Function[/COLOR]


Ve işte sonuçlar.










Bu makalede kullanılan programlar : Visual Basic 6.0


Bir sonraki makalede görüşmek üzere..


eSa
 

eSa

Dekan
Yasaklı
Yazdıklarımın sadece bir kişiye bile faydası dokunsa beni mutlu eder.
 

WebNick

Profesör
Programcılıkta daha emekleme seviyesindeyim. Onun için bu paylaşımın kalitesini tartmak gibi bir şeye hakkım yok. Lakin dışarıdan bakınca gerçekten güzel ve hoş bir paylaşım.

SDN de spor konularından çok bu tarz konuları daha fazla görmek isterim.

Emeğine sağlık.
 

JeweLRocK

Üyecik
download programında yazanları yaptım fakat program tepki vermiyor yani hiç indirme islemi baslamıyor elinizde hazır source varmı yada Bunun ftp'mdeki x klasöründekilerin hepsini indirebilecek olanı varsa teamwiever ile yardım edebilirmisiniz :yes::yes:
 

eSa

Dekan
Yasaklı
Ftp sitesine bağlantı için kullanıcı adı ve şifresi gerekli olduğu için dosyaya ulaşamıyordur.

Örneği normal bir siteden indirme yaparak çalıştığını görebilirsiniz.

Ftp den dosya indirmek ve ftp üzerinde yapılan işlemler biraz farklı. Eğer beklerseniz yarın ftp üzerinde dosya işlemleri yapan açık kaynaklı bir vb6 örneğini yarın konu olarak açabilirim.
 

JeweLRocK

Üyecik
Ftp sitesine bağlantı için kullanıcı adı ve şifresi gerekli olduğu için dosyaya ulaşamıyordur.

Örneği normal bir siteden indirme yaparak çalıştığını görebilirsiniz.

Ftp den dosya indirmek ve ftp üzerinde yapılan işlemler biraz farklı. Eğer beklerseniz yarın ftp üzerinde dosya işlemleri yapan açık kaynaklı bir vb6 örneğini yarın konu olarak açabilirim.

Baska bir siteninkini denedim adres cubuğuna yazınca iniyor. Fakat projeye linki eklediğimde inmiyor

Elbette beklerim daha cok öğreneceğim seyler var İndirilen dosyaları md5 kontrolu nasıl yapabiliriz ? Yani dosyayı indirdik değişiklik varmı yokmu onu timer ile kontrol etmek istiyorum hile engelleme sistemi yapmaya calısıyorumda
 

eSa

Dekan
Yasaklı
Programın çalışan şeklini atarım yarın kontrol edersiniz. md5 kontrol konusuna bakarız.
 

Tepelii

Asistan
İlgilendiğiniz için teşekkür ederim buda ss


Konu Dışı Ama Bana Masaüstü Arka Planını Atabilir Misiniz ? Teşekkürler.

- - - Mesaj Güncellendi - - -

Bu makalede, basit ama etkili bir download programının nasıl yapılacağını göreceğiz.
Yeni bir boş proje formu açarak, menüden Add User Control ile yeni bir usercontrolu projemize ekliyoruz.








Eklediğimiz usercontrolun özelliklerinden ismini downloader yapıp, üzerine de image nesnesi ile ufak bir icon yerleştirtim. Böylelikle oluşturduğumuz usercontrolu formumuza eklediğimizde yeri belli olsun.


Usercontrolun üzerinde çift tıklayarak içine giriyoruz. ve aşağıdaki kodu olduğu gibi bu kısma ekleyelim.



Kod:
[COLOR=#0000cd]Public Event[/COLOR] DownloadProgress(CurBytes [COLOR=#0000cd]As Long[/COLOR], MaxBytes[COLOR=#0000cd] As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]Public Event[/COLOR] DownloadComplete(MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]Public Event[/COLOR] DownloadCancelled(CurBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
 
[COLOR=#0000cd]Private [/COLOR]uFileName [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Public [/COLOR]ilabel[COLOR=#0000cd] As Long[/COLOR]
[COLOR=#0000cd]Public [/COLOR]FileSizeWithMB [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Public [/COLOR]FileSizeWithKB [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Dim [/COLOR]FileNO [COLOR=#0000cd]As Long[/COLOR], BytesPos[COLOR=#0000cd] As Long[/COLOR]
[COLOR=#0000cd]Public Event [/COLOR]DownloadError(SaveFile [COLOR=#0000cd]As String[/COLOR], strError[COLOR=#0000cd] As String[/COLOR])
 


[COLOR=#0000cd]Private Sub[/COLOR] UserControl_AsyncReadComplete(AsyncProp [COLOR=#0000cd]As [/COLOR]AsyncProperty)
 [COLOR=#0000cd]On Error GoTo[/COLOR] errlabel
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadComplete(AsyncProp.BytesMax, uFileName)
    [COLOR=#0000cd]Close [/COLOR]#FileNO
 
 
[COLOR=#0000cd] Exit Sub[/COLOR]
errlabel:
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
 Err.Clear
 [COLOR=#0000cd]Close [/COLOR]#FileNO
  
[COLOR=#0000cd]End Sub[/COLOR]
 
[COLOR=#0000cd]Private Sub[/COLOR] UserControl_AsyncReadProgress(AsyncProp [COLOR=#0000cd]As [/COLOR]AsyncProperty)
[COLOR=#0000cd] On Error GoTo[/COLOR] AsyncReadProgressERR
  
 [COLOR=#0000cd]Dim [/COLOR]tempFileSize [COLOR=#0000cd]As String[/COLOR]
 tempFileSize = CStr(AsyncProp.BytesMax / 1024)
 FileSizeWithKB = Mid(tempFileSize, 1, InStr(1, tempFileSize, ".") + 2) & "KB"
 tempFileSize = CStr(AsyncProp.BytesMax / 1024 / 1024)
  
 FileSizeWithMB = Mid(tempFileSize, 1, InStr(1, tempFileSize, ".") + 2) & "MB"
  
 [COLOR=#0000cd]Dim [/COLOR]b() [COLOR=#0000cd]As Byte[/COLOR]
 b = AsyncProp.Value
 [COLOR=#0000cd]For [/COLOR]I = BytesPos To AsyncProp.BytesRead - 1
 Put #FileNO, , b(I)
 [COLOR=#0000cd]Next [/COLOR]I
 BytesPos = AsyncProp.BytesRead
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadProgress(AsyncProp.BytesRead, AsyncProp.BytesMax, uFileName)
 [COLOR=#0000cd]DoEvents[/COLOR]
[COLOR=#0000cd] Exit Sub[/COLOR]
AsyncReadProgressERR:
  
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
 Err.Clear
[COLOR=#0000cd]End Sub[/COLOR]
 
 
[COLOR=#0000cd]Public Sub [/COLOR]BeginDownload([COLOR=#0000cd]ByVal[/COLOR] URL[COLOR=#0000cd] As String[/COLOR], [COLOR=#0000cd]ByVal [/COLOR]FileName[COLOR=#0000cd] As String[/COLOR])
 'filename = target
 uFileName = FileName 'target
 
[COLOR=#0000cd]On Error GoTo[/COLOR] DownloadBeginERR
  
 FileNO = FreeFile()
 [COLOR=#0000cd]Open [/COLOR]FileName [COLOR=#0000cd]For [/COLOR]Binary [COLOR=#0000cd]As [/COLOR]FileNO
 BytesPos = 0
 UserControl.AsyncRead URL, vbAsyncTypeByteArray, FileName, vbAsyncReadForceUpdate
[COLOR=#0000cd] Exit Sub[/COLOR]
DownloadBeginERR:
  
 [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(FileName, Err.Description)
 Err.Clear
[COLOR=#0000cd]End Sub[/COLOR]
 

[COLOR=#0000cd]Public Sub[/COLOR] DownLoadStop()
   [COLOR=#0000cd] On Error Resume Next[/COLOR]
 UserControl.CancelAsyncRead uFileName 'uTarget
[COLOR=#0000cd]End Sub[/COLOR]




[COLOR=#0000cd]Public Function[/COLOR] CancelAllDownload()[COLOR=#0000cd] As Boolean[/COLOR]
       [COLOR=#0000cd]On Error GoTo[/COLOR] CancelAllDownloadErr
 UserControl.CancelAsyncRead uFileName 'uTarget
    [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadCancelled(BytesPos, uFileName)
    CancelAllDownload = True
    [COLOR=#0000cd]Exit Function[/COLOR]
CancelAllDownloadErr:
    [COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
    CancelAllDownload = False
    Err.Clear
[COLOR=#0000cd]End Function[/COLOR]
 
 
[COLOR=#0000cd]Private Sub[/COLOR] UserControl_Resize()
UserControl.Width = ScaleX(32, vbPixels, vbTwips)
UserControl.Height = ScaleY(32, vbPixels, vbTwips)
[COLOR=#0000cd]End Sub[/COLOR]


Usercontroll ile işimiz bitti. Artık oluşan usercontrolu ToolBox ta görebiliyoruz.







Sırada formumuzu oluşturmaya geldi. Boş olan formumuz (Form1) üzerine örnekteki gibi textbox, command1 (İndir), command2(İptal) ,progressbar, label ve tabiki oluşturduğumuz usercontrol (downloader) nesnelerini ekledim.





Download işlemini başlatmak için gerekli olan komutumuz.


Kod:
downloader1.begindownload "URL" , "KAYIT_YERİ_VE_DOSYA_ADI"


Bu aşamada kayıt yapabilmek için, url nin içinden dosyanın adını ve uzantısını almak gerekecekti. Bunun için de ufak bir fonksiyon oluşturdum (GetFileName) . Bunun üzerinde ufak bir değişiklik ile işinize yarayacak ise GetFilePath olarak da düzenleyebilir, yalnızca path i alabilirsiniz.


Kod:
[COLOR=#0000cd]Function[/COLOR] GetFileName([COLOR=#0000cd]ByVal [/COLOR]path [COLOR=#0000cd]As String[/COLOR]) [COLOR=#0000cd]As String[/COLOR]

GetFileName = Mid(StrReverse(path), 1, InStr(1, StrReverse(path), "/") - 1)
GetFileName = StrReverse(GetFileName)

[COLOR=#0000cd]End Function[/COLOR]


Kodlar anlaşılır olduğu için tek tek anlatmak yerine Form1 içinde yazılan kodları bir defada yazıyorum.


Kod:
[COLOR=#0000cd]Private Sub[/COLOR] Command1_Click() '[COLOR=#008000]İndir[/COLOR]
downloader1.BeginDownload Text1.Text, "c:\test\" & GetFileName(Text1.Text)
[COLOR=#0000cd]End Sub[/COLOR]


[COLOR=#0000cd]Private Sub[/COLOR] Command2_Click() '[COLOR=#008000]iptal[/COLOR]
downloader1.DownLoadStop
[COLOR=#0000cd]End Sub[/COLOR]




[COLOR=#0000cd]Private Sub[/COLOR] downloader1_DownloadComplete(MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]MsgBox [/COLOR]"İndirme işlemi tamamlandı.." & vbCrLf & SaveFile & " - " & downloader1.FileSizeWithMB
[COLOR=#0000cd]End Sub[/COLOR]




[COLOR=#0000cd]Private Sub[/COLOR] downloader1_DownloadProgress(CurBytes [COLOR=#0000cd]As Long[/COLOR], MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
Label1.Caption = Format((CurBytes / 1024 / 1024), "0.##MB") & " / " & Format((MaxBytes / 1024 / 1024), "0.##MB")
ProgressBar1.Max = MaxBytes
ProgressBar1.Value = CurBytes


[COLOR=#0000cd]End Sub[/COLOR]




[COLOR=#0000cd]Function[/COLOR] GetFileName([COLOR=#0000cd]ByVal [/COLOR]path [COLOR=#0000cd]As String[/COLOR]) [COLOR=#0000cd]As String[/COLOR]


GetFileName = Mid(StrReverse(path), 1, InStr(1, StrReverse(path), "/") - 1)
GetFileName = StrReverse(GetFileName)


[COLOR=#0000cd]End Function[/COLOR]


Ve işte sonuçlar.










Bu makalede kullanılan programlar : Visual Basic 6.0


Bir sonraki makalede görüşmek üzere..


eSa

Visual Studio 2012 Kullanıyorum Ve Bahsettiğiniz Yerleri Bulamadım Acaba Yardımcı Olabilir misiniz ?
 

eSa

Dekan
Yasaklı
Bu makalede kullanılan programlar :
Visual Basic 6.0

Programın bulunduğu klasöre kayıt için;


downloader1.BeginDownload Text1.Text, "c:\test\" & GetFileName(Text1.Text)


satırını

downloader1.BeginDownload Text1.Text, app.path & "\" & GetFileName(Text1.Text)


şeklinde değiştirin.
 
Üst