Ошибка GZipStream - PullRequest
       3

Ошибка GZipStream

0 голосов
/ 11 ноября 2010

Я использую код ниже и получаю эту ошибку InvalidDataExcption: The magic number in GZip header is not correct. Make sure you are passing in a GZip stream. Я пытаюсь извлечь файл Microsoft Word .docx. (подсветка кода делает странные вещи с моими комментариями)

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

1 Ответ

1 голос
/ 11 ноября 2010

.docx файлы сохраняются в формате pkzip. Это полностью отличается от формата gzip.

SharpZipLib - это один из вариантов, который вы можете использовать для чтения этих файлов, хотя существует и много других.

...