我有一个使用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
帮助?
答案 0 :(得分:0)
尝试在使用书面数据之前完成BZip2OutputStream。这对我有帮助。
zosCompressed.Finalize();
buffer = msCompressed.ToArray();