2009-12-29 22 views
6

Bir dosyayı nasıl indireceğinizi (bir web sayfasını açmadan) ve Visual Basic 6.0'daki bir dizine kaydetmeyi bilen var mı?Download Dosyası - VB6

+0

** Ve 81 Qs sadece 4 oy ile ??? ** –

+1

Yazıcınıza imza eklemeniz gerekmez - kullanıcı kartınız otomatik olarak eklenir. Daha fazla bilgi için [SSS] sayfasını okuyun (http://stackoverflow.com/faq#signatures). – Artemix

cevap

6

Yalnızca kodla (Internet Aktarım Denetimi yok) yapmak istiyorsanız, VBNet.mvps.org URLDownloadToFile API çağrısı kullanan gerçekten iyi bir makaleye sahiptir. Makale

:

URLDownloadToFile API (Win3, WinNT3.x hariç), Windows işletim sisteminin tüm sürümlerinde mevcuttur. Uzak dosya adı ve yerel dosya yolu ve adı, geçirerek API, belirtilen dosyanın bitlerini hedef adı olarak kaydederek indirir. fonksiyon tüm dosya türleri ile çalışır -, düz metin, resim, html, mpg, wav ve zip dosyaları vb dosya için rutin veya endişe değiştirilmeden indiriliyor ne de görünürde herhangi boyut kısıtlama yoktur ya sınırlama.

Private Declare Function URLDownloadToFile Lib "urlmon" _ 
    Alias "URLDownloadToFileA" _ 
    (ByVal pCaller As Long, _ 
    ByVal szURL As String, _ 
    ByVal szFileName As String, _ 
    ByVal dwReserved As Long, _ 
    ByVal lpfnCB As Long) As Long 

Private Const ERROR_SUCCESS As Long = 0 
Private Const BINDF_GETNEWESTVERSION As Long = &H10 
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000 

Public Function DownloadFile(sSourceUrl As String, _ 
          sLocalFile As String) As Boolean 

    //'Download the file. BINDF_GETNEWESTVERSION forces 
    //'the API to download from the specified source. 
    //'Passing 0& as dwReserved causes the locally-cached 
    //'copy to be downloaded, if available. If the API 
    //'returns ERROR_SUCCESS (0), DownloadFile returns True. 
    DownloadFile = URLDownloadToFile(0&, _ 
            sSourceUrl, _ 
            sLocalFile, _ 
            BINDF_GETNEWESTVERSION, _ 
            0&) = ERROR_SUCCESS 

End Function 

Bilginize - Windows 7 üzerinde test, sadece önbelleğe alınmış sürümünü dönecekti, bu yüzden önce onu temizlemek için makalede belirtilen ekstra işlevi kullanmak zorunda kaldı (ve bu çalıştı).

Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _ 
    Alias "DeleteUrlCacheEntryA" _ 
    (ByVal lpszUrlName As String) As Long 

Sonra sadece önbelleği temizlemek için, ilk hedef URL'ye sahip yukarıdaki işlevini çağırın.

+3

** API çağrılarına ihtiyacınız yok **, İnternet Aktarımı denetimine ** gerek yok. Sadece yerel VB6 kodunu kullanarak kolay yolu yapın. http://visualstudiomagazine.com/articles/2008/03/27/simple-asynchronous-downloads.aspx – MarkJ

+0

+1, beni bu API çağrılarına tanıttığınız için çok teşekkürler. –

0

Internet Aktarım Denetimi'ni beğenmedim çünkü eşzamanlı. Bir indirme işlemini başlattığınızda, dosya indirilinceye veya bir hata atılana kadar uygulamanıza yanıt vermiyor. Eşzamansız yöntemler yazmak için WININET DLL kullanmanın iyi örnekleri vardır. Bu önemsiz değil, aynı zamanda çok yapılabilir. Here, yığın akışından bir örnektir.

+0

** **, VB6'da eşzamansız indirme yapmak için önemsizdir ve API çağrıları gerektirmez. Yanıtıma bakın http://stackoverflow.com/questions/1976152/download-file-vb6/1979417#1979417 – MarkJ

6

API çağrılarına ihtiyacınız yoktur, İnternet Aktarım denetimine ihtiyacınız yoktur. Sadece yerel VB6 kodunu kullanarak kolay yolu yapın. İşte örnek kod ile mükemmel bir article by Karl Peterson.

+0

Daha önce hiç görmediğim bir şey vardı. WININET kütüphanesini kullanarak tam bir sınıfa sahibim, eğer bunu tekrar VB'de yapmam gerekirse, muhtemelen bununla başa çıkacağım, ama alternatiflere sahip olmak her zaman iyidir. – jac

+0

Internet Explorer'ın çevrimdışı mülkü doğruysa, bu işe yaramaz. Bir dosya bulunamadı hatası alırsınız. – kjack

-1

Bu deneyin:

Örnek:

My.Computer.Network.DownloadFile _ 
("http://www.cohowinery.com/downloads/WineList.txt", _ 
"C:\Documents and Settings\All Users\Documents\WineList.txt") 
+2

Bu VB.NET gibi görünüyor, soru VB6 –

1

bu

Sub DownloadFile(url, path) 

    Dim objReq 
    Dim objStream 

    Set objReq = CreateObject("MSXML2.XMLHTTP") 
    objReq.Open "GET", url, False 
    objReq.send 

    If objReq.Status = 200 Then 
     Set objStream = CreateObject("ADODB.Stream") 
     objStream.Open 
     objStream.Type = 1 

     objStream.Write objReq.ResponseBody 
     objStream.Position = 0 

     objStream.SaveToFile path, 2 
     objStream.Close 
     Set objStream = Nothing 
    End If 

    Set objReq = Nothing 

End Sub 
deneyin

My.Computer.Network.DownloadFile (*File to download*, *What to save it as*) 

Gün içinde bir çok olarak kaydedin ne bir dosya adı vermelidir

daha fazla bilgi için bkz. http://smartreferences.blogspot.in

+0

hakkındadır Neden bu cevapta bir puan olduğunu bilmiyorum. Gerçekten inet kontrolsüz çalışan tek cevap bu. Yardım için teşekkürler. –