我有一个使用 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
帮助?