Problème de téléchargement

Timow2 Messages postés 1 Date d'inscription mardi 23 février 2016 Statut Membre Dernière intervention 23 février 2016 - 23 févr. 2016 à 22:40
Senso2003 Messages postés 4 Date d'inscription mardi 7 juin 2016 Statut Membre Dernière intervention 18 août 2016 - 18 août 2016 à 10:08
Bonjour à tous,

Voilà je viens poster une demande d'aide car voilà quelque mois que mon projet est en arrêt.
J'ai codé un updater automatique qui télécharge les mises à jours de mon jeu sur l'ordinateur.

Tout ce passe bien pour les fichiers .exe qui sont téléchargés correctement mais j'ai un problème lorsqu'il s'agit d'un .swf et lorsque je met un chemin de dossier.

Exemple :
- Fichier .exe (Télécharge sans soucis)
- Fichier .swf (Le updater bloque, puis m'indique que le fichier n'existe pas)
- Fichier dans un dossier ; Musique/minecraftaudio.swf (Le updater bloque, puis m'indique que le fichier n'existe pas)

Je ne trouve pas la solution :x 2 mois que je suis bloqué.

Voilà mon bout de code pour la MaJ :

 Public Sub GetMaj()
        If isWaitUpd = True Then
            If loadIntro = True Then
                TextBox1.AppendText(vbCrLf & "Version du client : " & RevisionLauncher & ".0.0")
                TextBox1.AppendText(vbCrLf & "Recherche de la derniere mise à jour du Client...")

                addToLog("Version du client : " & RevisionLauncher & ".0.0", True, New Font("Verdana", 9, FontStyle.Bold), Color.DarkGray, False)
                Logs.AppendText(vbCrLf & vbCrLf)
                loadIntro = False
            End If

            Label7.Text = "Recherche de mises à jour du jeu..."
            addToLog("• Recherche des dernières mises à jour du jeu...", True, New Font("Verdana", 8, FontStyle.Regular), Color.DarkGray, False)
            Logs.AppendText(vbCrLf)
            Dim sw As New StreamWriter(Application.StartupPath & "\Cache.html")
            Dim getMajSrc = Request_Get(LinkMAJ)
            sw.WriteLine(getMajSrc)
            sw.Close()
            System.Threading.Thread.Sleep(2000)
            Try
                Dim monStreamReader As New StreamReader(Application.StartupPath & "\Cache.html") 'Stream pour la lecture
                majinfo = Split(monStreamReader.ReadToEnd, vbCrLf)
                monStreamReader.Close()

            Catch ex As Exception
                majinfo = Split(getMajSrc, vbCrLf)
            End Try
            TextBox1.AppendText(vbCrLf & "Préparation de la mise a jour ...")
            ProgressBar1.Style = ProgressBarStyle.Continuous
            addToLog("  › Préparation de la mise a jour ...", True, New Font("Verdana", 8, FontStyle.Italic), Color.DarkGray, False)
            Logs.AppendText(vbCrLf)
            System.Threading.Thread.Sleep(2000)
            BackgroundWorker3.RunWorkerAsync()
            isWaitUpd = False
        Else
            ProgressBar1.Style = ProgressBarStyle.Blocks
            If mfiles.Count = 0 Then
                TextBox1.AppendText(vbCrLf & "Aucune mise a jour est necessaire")
                TextBox1.AppendText(vbCrLf & vbCrLf & "Le client est à jour.")
                Label7.Text = "Mise à jour terminé."
                addToLog("  › Le jeu est à jour.", True, New Font("Verdana", 8, FontStyle.Italic), Color.Green, True)
                Logs.AppendText(vbCrLf & vbCrLf)
                GameReady(True)
                Button1.Enabled = True
                Exit Sub
            End If
            If mfiles.Count > 1 Then
                TextBox1.AppendText(vbCrLf & mfiles.Count & " fichiers vont être téléchargés !" & vbCrLf)
                Label7.Text = mfiles.Count & " fichiers vont être téléchargés !"
                addToLog("  › " & mfiles.Count & " fichiers vont être téléchargés !", True, New Font("Verdana", 8, FontStyle.Italic), Color.Orange, False)
                Logs.AppendText(vbCrLf)
                tdl = mfiles.Count
                ProgressBar2.Maximum = tdl
            Else
                TextBox1.AppendText(vbCrLf & "1 fichier va être téléchargé !" & vbCrLf)
                Label7.Text = "1 fichier va être téléchargé."
                addToLog("  › " & "1 fichier va être téléchargé !", True, New Font("Verdana", 8, FontStyle.Italic), Color.Orange, False)
                Logs.AppendText(vbCrLf)
                tdl = "1"
            End If
            addToLog("      ▫ " & "Téléchargement des fichiers : ", True, New Font("Verdana", 8, FontStyle.Bold), Color.DarkOrange, False)
            Logs.AppendText(vbCrLf)
            For Each file As String In mfiles
                actuFDL = file
                Label7.Text = "Téléchargement de : " & file & " (0%)"
                TextBox1.AppendText(vbCrLf & "Téléchargement du fichier " & file & "...")
                addToLog("          ▪ " & file, True, New Font("Verdana", 8, FontStyle.Italic), Color.DarkGray, False)
                Logs.AppendText(vbCrLf)
                BackgroundWorker1.RunWorkerAsync(New Object() {LinkUpdater & majinfo(1) & file,
                                                               Application.StartupPath & "\" & file})
                dlf = dlf + 1
                actuDL.Text = dlf & "/" & tdl

                ProgressBar2.Value = dlf
                While BackgroundWorker1.IsBusy
                    Application.DoEvents()
                End While
                If vCancelled Then Exit For
            Next

            If vCancelled Then
                TextBox1.AppendText(vbCrLf & vbCrLf & "Mise a jour annulé !")
                addToLog("› " & "Mise a jour annulé !", True, New Font("Verdana", 8, FontStyle.Bold), Color.Red, False)
                Logs.AppendText(vbCrLf)
                GameReady(True)
            Else
                My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\versions.txt", majinfo(0), False)
                TextBox1.AppendText(vbCrLf & vbCrLf & "Votre jeu est maintenant à jour.")
                GameReady(True)
                Label2.Text = "Le jeu est à jour ;)"
                Logs.AppendText(vbCrLf)
                addToLog("› " & "Votre jeu est maintenant à jour.", True, New Font("Verdana", 8, FontStyle.Bold), Color.Green, False)
                Logs.AppendText(vbCrLf & vbCrLf)
                TimerUpdate.Enabled = True
                TimerUpdate.Start()
            End If
            GameReady(True)
        End If
    End Sub


et mon backgroundworker qui m'affiche l'erreur :

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Dim theResponse As HttpWebResponse
        Dim theRequest As HttpWebRequest
        Try
            theRequest = WebRequest.Create(e.Argument(0))
            theResponse = theRequest.GetResponse()
        Catch ex As Exception
            MessageBox.Show("An error occurred while downloading file. Possible causes:" & ControlChars.CrLf &
                            "1) File doesn't exist" & ControlChars.CrLf &
                            "2) Remote server error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)
            Me.Invoke(cancelDelegate, True)
            Exit Sub
        End Try

        Dim length As Long = theResponse.ContentLength

        Dim safedelegate As New ChangeTextsSafe(AddressOf ChangeTexts)
        Me.Invoke(safedelegate, length, 0, 0, 0) '

        My.Computer.FileSystem.CreateDirectory(New IO.FileInfo(e.Argument(1)).DirectoryName)
        Dim writeStream As New IO.FileStream(e.Argument(1), IO.FileMode.Create)
        Dim nRead As Integer
        Dim speedtimer As New Stopwatch
        Dim currentspeed As Double = -1
        Dim readings As Integer = 0
        Do
            If BackgroundWorker1.CancellationPending Then
                Exit Do
            End If
            speedtimer.Start()
            Dim readBytes(4096) As Byte
            Dim bytesread As Integer = theResponse.GetResponseStream.Read(readBytes, 0, 4096)
            nRead += bytesread
            Dim percent As Short = Math.Max(0, (CLng(nRead) * 100) / Math.Max(1, length))
            Try
                Me.Invoke(safedelegate, length, nRead, percent, currentspeed)
            Catch ex As Exception
                Debug.Print("Erreur sur Invoke de type Value")
                Exit Do
            End Try

            If bytesread = 0 Then Exit Do
            writeStream.Write(readBytes, 0, bytesread)
            speedtimer.Stop()
            readings += bytesread
            If speedtimer.ElapsedMilliseconds >= 1000 Then
                currentspeed = readings / (speedtimer.ElapsedMilliseconds / 1000)
                speedtimer.Reset()
                readings = 0
            End If
        Loop
        theResponse.GetResponseStream.Close()
        writeStream.Close()
        If Me.BackgroundWorker1.CancellationPending Then
            IO.File.Delete(e.Argument(1))
            Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)
            Me.Invoke(cancelDelegate, True)
            Exit Sub
        End If
        Dim completeDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)
        Try
            Me.Invoke(completeDelegate, False)
        Catch ex As Exception

        End Try

    End Sub


Voilà, mes fichier son stocké sur un ftp ou se trouve mon site. (http://monsite/updater/releases/)

Merci d'avance.
Cordialement, Timothé

2 réponses

Senso2003 Messages postés 4 Date d'inscription mardi 7 juin 2016 Statut Membre Dernière intervention 18 août 2016 1
18 août 2016 à 10:08
Juste une information qui pourrait vous interessez.
Utilisez plutot dropbox pour le stockage des fichiers mis a jour.
Et tout de code pour une simple mise a jour c'est enorme.
Tu peux plus simplement stocker dans un fichier sur ton dropbox La Version actuelle et les liens de tous les fichiers de mise a jour puis lire ton fichier ligne par ligne sur vb et telecharger chacun des composants.
1
wmade Messages postés 34 Date d'inscription samedi 18 juin 2016 Statut Membre Dernière intervention 20 octobre 2017
19 juin 2016 à 12:14
Bonjour,

Je vois pas ou est l'erreur.

Pourrai tu mettre l'info de l'erreur ?

Merci
0
Rejoignez-nous