VB.net 2005内GZipStream类别可以针对档案做压缩、解压缩

[日期:2007-11-08]   来源:互联网整理  作者:未知   [字体: ]
    新闻简介:Imports System.IO
Imports System.IO.Compression
Public Class ClsZip
    Public Sub CompressFile(ByVal sourceFile As String, ByVal destinationFile As String)
        '压缩档案
        If Not File.Exists(sourceFile) Then
   
         关 键 词:   vb.net  压缩  gzip  GZipStream  解压缩  VB.NET 2005 

Imports System.IO
Imports System.IO.Compression

Public Class ClsZip
    Public Sub CompressFile(ByVal sourceFile As String, ByVal destinationFile As String)
        '压缩档案
        If Not File.Exists(sourceFile) Then
            Throw New FileNotFoundException
        End If

        Dim sourceStream As FileStream = Nothing
        Dim destinationStream As FileStream = Nothing
        Dim compressedStream As GZipStream = Nothing

        Try
            'Read the bytes from the source file into a byte array
            sourceStream = New FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read)
            'Read the source stream values into the buffer
            Dim buffer(sourceStream.Length - 1) As Byte
            Dim checkCounter As Integer = sourceStream.Read(buffer, 0, buffer.Length)

            If checkCounter <> buffer.Length Then
                Throw New ApplicationException
            End If

            'Open the FileStream to write to
            destinationStream = New FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write)

            'Create a compression stream pointing to the destiantion stream
            compressedStream = New GZipStream(destinationStream, CompressionMode.Compress, True)

            'Now write the compressed data to the destination file
            compressedStream.Write(buffer, 0, buffer.Length)
        Catch ex As ApplicationException
            MessageBox.Show(ex.Message)
        Finally
            'Make sure we allways close all streams
            If sourceStream IsNot Nothing Then
                sourceStream.Close()
            End If

            If compressedStream IsNot Nothing Then
                compressedStream.Close()
            End If

            If destinationStream IsNot Nothing Then
                destinationStream.Close()
            End If
        End Try
    End Sub

    Public Sub DecompressFile(ByVal sourceFile As String, ByVal destinationFile As String)
        '解压缩档案
        'make sure the source file is there
        If Not File.Exists(sourceFile) Then
            Throw New FileNotFoundException
        End If

        'Create the streams and byte arrays needed
        Dim sourceStream As FileStream = Nothing
        Dim destinationStream As FileStream = Nothing
        Dim decompressedStream As GZipStream = Nothing
        Dim quartetBuffer(4) As Byte

        Try
            'Read in the compressed source stream
            sourceStream = New FileStream(sourceFile, FileMode.Open)

            'Create a compression stream pointing to the destiantion stream
            decompressedStream = New GZipStream(sourceStream, CompressionMode.Decompress, True)

            'Read the footer to determine the length of the destiantion file
            Dim position As Integer = sourceStream.Length - 4
            sourceStream.Position = position
            sourceStream.Read(quartetBuffer, 0, 4)
            sourceStream.Position = 0
            Dim checkLength As Integer = BitConverter.ToInt32(quartetBuffer, 0)

            Dim buffer(checkLength + 100) As Byte
            Dim offset, total As Integer
            'Read the compressed data into the buffer
            While (True)
                Dim bytesRead As Integer = decompressedStream.Read(buffer, offset, 100)

                If bytesRead = 0 Then Exit While

                offset += bytesRead
                total += bytesRead
            End While

            'Now write everything to the destination file
            destinationStream = New FileStream(destinationFile, FileMode.Create)
            destinationStream.Write(buffer, 0, total)

            'and flush everyhting to clean out the buffer
            destinationStream.Flush()

        Catch ex As ApplicationException
            MessageBox.Show(ex.Message)
        Finally
            'Make sure we allways close all streams
            If sourceStream IsNot Nothing Then
                sourceStream.Close()
            End If

            If decompressedStream IsNot Nothing Then
                decompressedStream.Close()
            End If

            If destinationStream IsNot Nothing Then
                destinationStream.Close()
            End If
        End Try
    End Sub
End Class

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值