2010-11-11 5 views
0

J'utilise le code ci-dessous et obtenir cette erreur InvalidDataExcption: The magic number in GZip header is not correct. Make sure you are passing in a GZip stream. Je suis en train d'extraire un fichier .docx Microsoft Word. (le surligneur de code est en train de faire des trucs bizarres à mes commentaires)Erreur GZipStream

Imports System.IO 
Imports System.IO.Compression 
Public Class Form1 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim path As String = "C:\Users\Gio\Documents\Test.zip" 
    'path.Split("\")(path.Split("\").Length - 1) 
    DecompressFile(path, "test", "C:\Users\Gio\Documents") 

End Sub 

''' <summary> 
'''Function to decompress a file using the GZipStream Class 
''' </summary> 
''' <param name="inputFileName">File that we want to decompress</param> 
''' <param name="destFileName">Name we want the decompressed file to be</param> 
''' <param name="destDirectory">Directory to save the file to</param> 
''' <returns>True/False</returns> 
''' <remarks></remarks> 
Public Function DecompressFile(ByRef inputFileName As String, ByRef destFileName As String, ByRef destDirectory As String) As Boolean 
    'Try 
    'Create a MemoryStream from the file bytes 
    Dim stream As New MemoryStream(File.ReadAllBytes(inputFileName)) 

    'Create a new GZipStream from the MemoryStream 
    Dim gZip As New GZipStream(stream, CompressionMode.Decompress) 

    'Byte array to hold bytes 
    Dim buffer(3) As Byte 

    'Read the stream 
    stream.Position = stream.Length - 5 
    stream.Read(buffer, 0, 4) 

    'Calculate the size of the decompressed bytes 
    Dim size As Integer = BitConverter.ToInt32(buffer, 0) 

    'Start at the beginning of the stream 
    stream.Position = 0 

    Dim decompressed(size - 1) As Byte 

    'Read decompressed bytes into byte array 
    gZip.Read(decompressed, 0, size) 

    'Close & clean up 
    gZip.Dispose() 
    stream.Dispose() 

    'Write the final file 
    File.WriteAllBytes(destDirectory & "\" & destFileName, decompressed) 

    Return True 
    'Catch ex As Exception 
    ' MessageBox.Show(ex.ToString()) 
    ' Return False 
    'End Try 
End Function 

End Class 

Répondre

1

fichiers .docx sont enregistrés au format pkzip. C'est complètement différent du format gzip. Est une option que vous pouvez utiliser pour lire ces fichiers, bien que de nombreux autres existent également.

+0

Merci qui a bien fonctionné – giodamelio

Questions connexes