以下是我用於壓縮和解壓縮目的的代碼。我的目標是將數據錶轉換爲XML,然後轉換爲二進制壓縮格式,然後將其讀回並將二進制轉換回XML。所以,基本上,我將XML轉換爲二進制壓縮,然後將壓縮二進制轉換回XML。從邏輯上講,數據大小應該相同,但由於某種原因,新的解壓縮XML文件丟失一個字節或更多。你們能幫我嗎?壓縮方法丟失一個或多個字節VB.NET
Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.IO.Compression
Imports System.Data.SqlClient
Imports System.Data.Sql
Public Class Form1
Dim dt As New SmExplorerDataDataSet.smedataDataTable
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ta As New SmExplorerDataDataSetTableAdapters.smedataTableAdapter
ta.Fill(dt)
dt.WriteXml("abc.xml")
'Read the XML file and compress it
Dim in_fs As FileStream = New FileInfo("abc.xml").OpenRead
Dim out_fs As FileStream = File.Create("def.cmp")
in_fs.CopyTo(New DeflateStream(out_fs, CompressionMode.Compress))
in_fs.Close()
out_fs.Close()
'Read the compressed file and decompress it back into XML
in_fs = New FileStream("def.cmp", FileMode.Open, FileAccess.Read)
out_fs = New FileStream("abc2.xml", FileMode.OpenOrCreate, FileAccess.Write)
Dim DFS As DeflateStream = New DeflateStream(in_fs, CompressionMode.Decompress)
DFS.CopyTo(out_fs)
in_fs.Close()
out_fs.Close()
End Sub
End Class
在第一個XML(原始文件),結尾行結束documentelement標籤正確像DocumentElement但新的解壓縮XML文件中,最後幾個字符從這個標籤丟失,它看起來像以下DocumentElem 這會導致錯誤,當我嘗試再次閱讀它。 請協助。
你永遠不會關閉DeflateStream,但它仍然有沒有得到刷新字節。查看關於DeflateStream的MSDN庫文章,瞭解如何正確執行此操作。 – 2014-12-04 18:46:30
@HansPassant謝謝你。我是否必須關閉文件流並按任何特定順序縮小streeam?因爲我編輯的代碼來關閉deflatestream,但我仍然有同樣的問題:( – 2014-12-04 19:15:47