以下是我用于压缩和解压缩目的的代码。我的目标是将数据表转换为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