@bobnoordam

Compressing and decompressing files with GZIPStream or Deflatestream

These samples whow how to compress and decompress files with the build in framework methods. For real world applications consider using something like .netzip from codeplex, since the compression quality from the build in methods is limited. Also, the build in methods will allow you to just compress and decompress a single file.

Compressing a file

Imports System.IO
Imports System.IO.Compression
  
Module packtool
  
    ''' <summary>
    ''' Example on using a deflatestream to compress a file into a target file
    ''' </summary>
    ''' <param name="args">args() will automagicaly hold the command line args
    ''' passed to the application</param>
    ''' <remarks>Error checking on the source and target files is left out to
    ''' keep the example to it's core. In a live deployment you should always
    ''' check to see if the source file is present and accessible and the target
    ''' file writable</remarks>
    Sub Main(ByVal args() As String)
  
        If args.Count <> 2 Then
            Console.WriteLine("format: pack <source> <target>")
            Return
        End If
  
        Dim sSource As String = args(0)
        Dim sTarget As String = args(1)
        Console.WriteLine("packing {0} to {1}", sSource, sTarget)
        Dim oSourcefile As FileStream = File.OpenRead(sSource)
        Dim oDestfile As FileStream = File.Create(sTarget)
        Using oCompressed As New System.IO.Compression.DeflateStream(oDestfile, CompressionMode.Compress)
            Dim dBuffer(8192) As Byte  ' --- 8 KB data buffer
            Dim nProcessed As Int64 = 0
            Dim nRead As Integer = 0
            Do
                nRead = oSourcefile.Read(dBuffer, 0, 8192)
                nProcessed += nRead
                oCompressed.Write(dBuffer, 0, nRead)
                Console.Write("{0} Kb processed{1}", Int(nProcessed / 1024), vbCr)
            Loop Until nRead = 0
            Console.WriteLine()
        End Using
        oDestfile.Close()
        oSourcefile.Close()
  
    End Sub
  
End Module

Decompressing a file

Imports System.IO
Imports System.IO.Compression
  
Module unpacktool
  
    ''' <summary>
    ''' Example on uncompressing a compressed file with the standard .net methods
    ''' </summary>
    ''' <param name="args">Command line arguments passed by the user</param>
    ''' <remarks>Error checking left out on the source and target file</remarks>
    Sub Main(ByVal args() As String)
  
        If args.Count <> 2 Then
            Console.WriteLine("format: unpack <source> <target>")
            Return
        End If
  
        Dim sSource As String = args(0)
        Dim sTarget As String = args(1)
        Console.Write("packing {0} to {1}", sSource, sTarget)
        Dim oSourcefile As FileStream = File.OpenRead(sSource)
        Dim oDestfile As FileStream = File.Create(sTarget)
        Using oCompressed As New System.IO.Compression.DeflateStream(oSourcefile, CompressionMode.Decompress)
            ' --- We could use a larger buffer here like in the compression example, but there
            '     is no real performance gain to be made since the framework handles the buffering
            '     quite efficiently.
            Dim dByte As Integer = oCompressed.ReadByte
            While dByte <> -1
                oDestfile.WriteByte(CType(dByte, Byte))
                dByte = oCompressed.ReadByte()
            End While
        End Using
        oDestfile.Close()
        oSourcefile.Close()
  
    End Sub
  
End Modul