Bonjour !
Je développe un installeur et j'ai besoin de téléchargé des fichiers (.exe). cepandant en utilisant
Code :
Code :
- My.Computer.Network.DownloadFile
|
Le ficher se télécharge bien, mais lorsque l'on essai de le lancer, il s'ouvre dans une console et se ferme (alors que c'est une winform !!! )
J'ai pu remédier à ce probleme en compressant ces fichiers... en .gz
J'utilise donc la méthode de Gzip Stream pour les décompresser ! voici mon code :
La fonction de décompression :
Code :
Code :
- Public Function decompression(ByVal cheminSource As String, ByVal cheminDestination As String) As Boolean
- Try
- 'Lecture du fichier compresse
- Dim monFileStream As New FileStream(cheminSource, FileMode.Open)
- ' Données du fichier placées dans un GZipStream
- Dim monGzipStream As New GZipStream(monFileStream, CompressionMode.Decompress)
- ' Tableau qui va contenir la taille du fichier
- Dim tailleOctets(3) As Byte
- ' Positionnement dans le Stream pour récupérer la taille
- Dim position As Integer = CInt(monFileStream.Length - 4)
- monFileStream.Position = position
- ' Récupération de la taille du fichier
- monFileStream.Read(tailleOctets, 0, 4)
- ' Repositionnement en début du Stream
- monFileStream.Position = 0
- ' Conversion de la taille du fichier en entier
- Dim tailleFichier As Integer = BitConverter.ToInt32(tailleOctets, 0)
- ' Dimesionnement du buffer
- Dim buffer(tailleFichier + 100) As Byte
- ' Offset qui permettra de se repérer dans le Stream
- Dim monOffset As Integer = 0
- While (True)
- ' Les données sont décompressées et placées dans le buffer
- Dim decompressionOctets As Integer = monGzipStream.Read(buffer, monOffset, 100)
- ' Tant qu'il reste des données on continue
- If (decompressionOctets = 0) Then
- Exit While
- End If
- ' On icrémente l'offset pour ne pas repartir de 0 à chaque fois...
- monOffset += decompressionOctets
- End While
- ' Création du fichier décompressé
- monFileStream = New FileStream(cheminDestination, FileMode.Create)
- ' Ecriture des données décomrpessées dans le fichier
- monFileStream.Write(buffer, 0, tailleFichier - 1)
- ' Efface les données en mémoire tampon
- monFileStream.Flush()
- ' Fermeture des Streams
- monFileStream.Close()
- monGzipStream.Close()
- Return True
- Catch ex As Exception
- Return False
- MsgBox(ex.Message)
- End Try
- End Function
|
Cette fonction est appelée comme suit :
Code :
Code :
- Call decompression(path & "\" & name & ".gz", path & "\" & name & ".exe" )
|
Code :
Code :
- path & "\" & name & ".gz"
|
étant le chemin du fichiers une fois celui ci téléchargé...
NB: j'ai essayer de mettre juste path dans le 2eme argument mais meme probleme...
Mon probleme :
Aucune décompression n'est effectuée !
Et le plus étonnant est que je n'ai aucune erreur en sortie !
Merci de votre aide !