Telechargement SUR de fichier

quantum59 Messages postés 7 Date d'inscription mercredi 26 novembre 2008 Statut Membre Dernière intervention 11 décembre 2008 - 11 déc. 2008 à 17:14
cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 - 6 nov. 2009 à 01:59
Bonjour,

Dans mon code, j'ai utilisé une fonction qui telecharge un fichier texte.
Le problème, c'est que ma fonction n'est pas sur car il arrive parfois que le fichier ne soit pas entièrement téléchargé (1/4 du fichier parfois) alors que la fonction me renvoie un téléchargement OK....

Je ne peux pas connaitre à l'avance la taille réelle du fichier afin de le comparer avec ce qu'il y a sur le serveur.
je met en dessous ma fonction, si quelqu'un a une idée pour sécurisé mes transferts afin que je sois sur que mon téléchargement soit vraiment ok

merci bcp

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 Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long

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

Public Function TelechargeURL(ByVal URL As String, ByVal fichierlocal As String) As Boolean
    Dim downloadfile As Boolean
   
    If DeleteUrlCacheEntry(URL) = 1 Then
       Debug.Print "Fichier Cache Trouvé et Effacé"
    Else
       Debug.Print "Pas de fichier en cache"
    End If

    downloadfile = URLDownloadToFile(0&, URL, fichierlocal, BINDF_GETNEWESTVERSION, 0&)
    If downloadfile = False Then
     Debug.Print "téléchargement ok"
     etattele = "ok"
    Else
     Debug.Print "Echec du téléchargement"
     etattele = "Echec"
    End If

End Function

3 réponses

cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 1
4 nov. 2009 à 23:38
Dim f As Integer
Dim webclient As New System.Net.WebClient()
Dim fichierout As String = "nomdufichieracharger.txt"
Dim fichiermaj As String = "http://adresse du fichier à charger"
f = 0
Try
webclient.DownloadFile(fichiermaj, fichierout)
Catch ex As Exception
f = 1
End Try
if f = 0 Then ' acces au fichier réussi
Dim reader As New StreamReader(fichierout)

code pour lire le fichier en local en final

reader.Close()
File.Delete(fichierout)
End If

sinon tu peux essayer de mettre une chaîne particulière à la fin de ton fichier et si tu ne l'as pas dans ce que tu as récupéré c'est que la lecture à échouer.

Espérant que cette solution n'arrive pas trop tard


007bidouille
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 30
5 nov. 2009 à 10:07
Salut,

@bidouille007 > Je pense que si, c'est un peu tard :
> Dernier signe de vie le 17 août 2009 à 09:40:18 sur http://www.vbfrance.com/

Mais cela ne fait rien car d'autres membres liront peut être ce post.

Niveau code plus simple encore (en .Net) :

        Try
            My.Computer.Network.DownloadFile("c:\test.txt", "http://monurl.com/lefichiertext.txt")
        Catch ex As Exception
        End Try


Petite infos pour ceux qui reprendrais le code vb6 plus haut > Les types 'Long' des API vb6, se traduisent en 'Interger' en .Net :

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


Voila, bonne prog a tous !

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 1
6 nov. 2009 à 01:59
Effectivement ta solution est bien plus light et je t'en remercie, ca allégera mon code pour sur.

bidouille007
0
Rejoignez-nous