0

我有一个使用 BZip2 压缩文件然后将其保存到新文件的程序。

Public Sub Create(ByVal outPathname As String, ByVal filePath As String)
    Dim msCompressed As New MemoryStream()
    Dim zosCompressed As New BZip2OutputStream(msCompressed)
    Dim fileInput As New FileStream(filePath, FileMode.Open)
    Dim buffer As Byte() = GetStreamAsByteArray(fileInput)
    zosCompressed.Write(buffer, 0, buffer.Length)
    zosCompressed.Flush()
    zosCompressed.Close()
    buffer = msCompressed.ToArray()
    Dim FileOutput As New FileStream(outPathname, FileMode.Create, FileAccess.Write)
    FileOutput.Write(buffer, 0, buffer.LongLength)
    FileOutput.Flush()
    FileOutput.Close()
End Sub

但我似乎无法弄清楚为什么我无法解压缩它创建的文件。有人能告诉我这里的减压器有什么问题吗?(它与压缩器在一个单独的程序中。)

Public Sub Extract(ByVal archiveFilenameIn As String, ByVal outFolder As String)
    Dim fileInput As New FileStream(archiveFilenameIn, FileMode.Open)
    Dim msUncompressed As New MemoryStream(GetStreamAsByteArray(fileInput))
    Dim zosDecompressed As New BZip2InputStream(msUncompressed)
    Dim buffer As Byte() = GetStreamAsByteArray(fileInput)
    zosDecompressed.Read(buffer, 0, buffer.Length())
    buffer = msUncompressed.ToArray()
    Dim FileOutput As New FileStream(outFolder & "\temporary.bmp", FileMode.Create, FileAccess.Write)
    FileOutput.Write(buffer, 0, buffer.LongLength)
    FileOutput.Flush()
    FileOutput.Close()
    zosDecompressed.Close()
    msUncompressed.Close()
    fileInput.Close()
End Sub

编辑:我还在这里使用了一个将流转换为字节数组的函数:

Private Function GetStreamAsByteArray(ByVal stream As System.IO.Stream) As Byte()
    Dim streamLength As Integer = Convert.ToInt32(stream.Length)
    Dim fileData As Byte() = New Byte(streamLength) {}

    ' Read the file into a byte array
    stream.Read(fileData, 0, streamLength)
    stream.Close()

    Return fileData
End Function

帮助?

4

1 回答 1

0

在使用写入数据之前尝试完成 BZip2OutputStream。这对我很有帮助。

zosCompressed.Finalize();
buffer = msCompressed.ToArray();

BZip2OutputStream 使用示例

于 2013-11-18T10:15:13.530 回答