2009-12-29 6 views
6

Est-ce que quelqu'un sait comment télécharger un fichier (sans ouvrir une page Web), et l'enregistrer dans un répertoire dans Visual Basic 6.0?Télécharger le fichier - VB6

+0

** Et 81 Qs avec seulement 4 votes ??? ** –

+1

Vous n'avez pas besoin d'inclure la signature dans votre message - votre carte d'utilisateur est ajoutée automatiquement. Lisez [FAQ] (http://stackoverflow.com/faq#signatures) pour plus de détails. – Artemix

Répondre

6

Si vous voulez le faire avec du code seulement (pas de contrôle de transfert Internet), VBNet.mvps.org a un très bon article de procédure qui utilise l'appel API URLDownloadToFile.

de l'article:

L'API est disponible URLDownloadToFile sur toutes les versions du système d'exploitation Windows (sauf Win3, WinNT3.x). En transmettant le fichier distant et le chemin d'accès et le nom du fichier local, , l'API télécharge les bits du fichier spécifié en les enregistrant sous le nom de cible . La fonction fonctionne avec tous les types de fichiers - texte brut, images, html, mpg, wav et les fichiers zip, etc. sans modification à la préoccupation de routine ou pour le fichier en cours de téléchargement, ni aucune taille apparente restriction ou limitation.

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 

Pour votre information - dans les tests sous Windows 7, il ne reviendrait la version en cache, donc je devais utiliser la fonction supplémentaire mentionné dans l'article pour l'effacer d'abord (et qui a travaillé). Ensuite, appelez simplement la fonction ci-dessus avec l'URL de destination en premier pour effacer le cache.

+3

Vous ** n'avez pas besoin d'appels d'API **, vous n'avez pas besoin du contrôle Internet Transfer **. Faites-le simplement, en utilisant le code VB6 natif. http://visualstudiomagazine.com/articles/2008/03/27/simple-asynchronous-downloads.aspx – MarkJ

+0

+1, merci beaucoup de me présenter ces appels d'API. –

0

Je n'aime pas le contrôle de transfert Internet car il est synchrone. Une fois que vous démarrez un téléchargement, votre application ne répond plus jusqu'à ce que le fichier soit téléchargé ou qu'une erreur soit générée. Il existe de nombreux exemples d'utilisation de la DLL WININET pour écrire des méthodes asynchrones. Ce n'est pas trivial, mais c'est aussi très faisable. Here est un exemple de stackoverflow.

+0

C'est ** trivial de faire des téléchargements asynchrones dans VB6 et il ne nécessite pas d'appels d'API. Voir ma réponse http://stackoverflow.com/questions/1976152/download-file-vb6/1979417#1979417 – MarkJ

6

Vous n'avez pas besoin d'appels API, vous n'avez pas besoin du contrôle Internet Transfer. Faites-le simplement, en utilisant le code VB6 natif. Voici un excellent article by Karl Peterson avec un exemple de code.

+0

Il y avait quelque chose que je n'avais jamais vu auparavant. J'ai une classe complète en utilisant la bibliothèque WININET, donc si je dois recommencer en VB, je m'en tiendrai probablement à cela, mais il est toujours bon d'avoir des alternatives. – jac

+0

Si la propriété hors ligne d'Internet Explorer est définie sur true, cela ne fonctionnera pas. Vous obtiendrez une erreur de fichier introuvable. – kjack

-1

Essayez ceci:

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

Vous devez lui donner un nom de fichier dans le quoi enregistrer comme:

Exemple:

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

Cela ressemble à VB.NET, question est à propos de VB6 –

1

Essayez cette

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 

plus de détails se référer http://smartreferences.blogspot.in

+0

Je ne sais pas pourquoi sur cette réponse est pas de points. C'est la seule réponse qui fonctionne vraiment sans contrôle inet. Merci pour l'aide. –