Bonjour,
Je cherche a décompresser un fichier zip avec VB.net 2005
J'ai trouver plusieurs code sur internet et il me donne toujours la même
erreur
Le nombre magique dans l'en-tête GZip n'est pas correct. Assurez-vous que
votre passage s'opère dans un flux GZip.
quelqu'un a une idée?????
Merci
sebas
Imports System.IO
Imports System.IO.Compression
Dim cheminSource As String = "c:\cmatfile.zip"
Dim cheminDestination As String = "c:\"
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
'le bug ###########################
Dim decompressionOctets As Integer =
monGzipStream.Read(buffer, monOffset, 100) <-----bug ici
' 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()
Lbltest.Text += "fin"
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jerome crevecoeur
Il me semble qu' IO.Compression n'utilise que le format de compression "G Z"
Pour utiliser le format Zip, vous pouvez utiliser la librairie open source SharpZipLib: http://www.icsharpcode.net/OpenSource/SharpZipLib/
Cordialement
lavache a écrit :
Bonjour, Je cherche a décompresser un fichier zip avec VB.net 2005
J'ai trouver plusieurs code sur internet et il me donne toujours la mê me erreur Le nombre magique dans l'en-tête GZip n'est pas correct. Assurez-vous que votre passage s'opère dans un flux GZip.
quelqu'un a une idée????? Merci sebas
Imports System.IO Imports System.IO.Compression
Dim cheminSource As String = "c:cmatfile.zip" Dim cheminDestination As String = "c:"
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 taill e 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 dan s le buffer 'le bug ########################### Dim decompressionOctets As Integer = monGzipStream.Read(buffer, monOffset, 100) <-----bug ici
' 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() Lbltest.Text += "fin"
Catch ex As Exception
MsgBox(ex.Message)
End Try
Il me semble qu' IO.Compression n'utilise que le format de compression "G Z"
Pour utiliser le format Zip, vous pouvez utiliser la librairie open
source SharpZipLib:
http://www.icsharpcode.net/OpenSource/SharpZipLib/
Cordialement
lavache a écrit :
Bonjour,
Je cherche a décompresser un fichier zip avec VB.net 2005
J'ai trouver plusieurs code sur internet et il me donne toujours la mê me
erreur
Le nombre magique dans l'en-tête GZip n'est pas correct. Assurez-vous que
votre passage s'opère dans un flux GZip.
quelqu'un a une idée?????
Merci
sebas
Imports System.IO
Imports System.IO.Compression
Dim cheminSource As String = "c:cmatfile.zip"
Dim cheminDestination As String = "c:"
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 taill e
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 dan s le buffer
'le bug ###########################
Dim decompressionOctets As Integer =
monGzipStream.Read(buffer, monOffset, 100) <-----bug ici
' 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()
Lbltest.Text += "fin"
Il me semble qu' IO.Compression n'utilise que le format de compression "G Z"
Pour utiliser le format Zip, vous pouvez utiliser la librairie open source SharpZipLib: http://www.icsharpcode.net/OpenSource/SharpZipLib/
Cordialement
lavache a écrit :
Bonjour, Je cherche a décompresser un fichier zip avec VB.net 2005
J'ai trouver plusieurs code sur internet et il me donne toujours la mê me erreur Le nombre magique dans l'en-tête GZip n'est pas correct. Assurez-vous que votre passage s'opère dans un flux GZip.
quelqu'un a une idée????? Merci sebas
Imports System.IO Imports System.IO.Compression
Dim cheminSource As String = "c:cmatfile.zip" Dim cheminDestination As String = "c:"
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 taill e 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 dan s le buffer 'le bug ########################### Dim decompressionOctets As Integer = monGzipStream.Read(buffer, monOffset, 100) <-----bug ici
' 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() Lbltest.Text += "fin"