Sample code for 30+ languages & platforms
Visual Basic 6.0

Streaming Compression

See more Compression Examples

Compress and decompress using a stream.

Chilkat Visual Basic 6.0 Downloads

Visual Basic 6.0
Dim success As Long
success = 0

' This example assumes the Chilkat API to have been previously unlocked.
' See Global Unlock Sample for sample code.

Dim fac As New CkFileAccess
Dim compress As New ChilkatCompression
compress.Algorithm = "deflate"

Dim streamC As New ChilkatStream

' This example sets the source and sink of the stream to files.
' A stream can have use other streams as a source or sink,
' or the application can itself be the source/sink by directly
' reading or writing a stream.  (See below for an example of this..)
streamC.SourceFile = "qa_data/hamlet.xml"
streamC.SinkFile = "qa_output/hamlet_compressed.dat"

' Compress from source to sink.
success = compress.CompressStream(streamC)
If (success <> 1) Then
    Debug.Print compress.LastErrorText
    Exit Sub
End If

Debug.Print "File-to-file deflate compression successful."
' Note: The FileSize method returns a signed 32-bit integer.  If the file is potentially larger than 2GB, call FileSizeStr instead to return
' the size of the file as a string, then convert to an integer value.
Debug.Print "Original size = " & fac.FileSize(streamC.SourceFile)
Debug.Print "Compressed size = " & fac.FileSize(streamC.SinkFile)

' Now do file-to-file decompression
Dim streamD As New ChilkatStream
streamD.SourceFile = "qa_output/hamlet_compressed.dat"
streamD.SinkFile = "qa_output/hamlet_restored.xml"

' Decompress from source to sink.
success = compress.DecompressStream(streamD)
If (success <> 1) Then
    Debug.Print compress.LastErrorText
    Exit Sub
End If

Debug.Print "File-to-file deflate decompression successful."

' Let's double-check to see that the files are equal in size and content:

Dim bFilesEqual As Long
bFilesEqual = fac.FileContentsEqual(streamC.SourceFile,streamD.SinkFile)
If (bFilesEqual <> 1) Then
    Debug.Print "The output file is not equal to the input file!"
Else
    Debug.Print "The file was successfully compressed and decompressed."
End If

' ---------------------------------------------------------------------
' Now let's decompress again, but this time w/ the application reading
' the decompressed data directly from a stream.
Dim streamA As New ChilkatStream

streamA.SourceFile = "qa_output/hamlet_compressed.dat"

' Start decompressing in a background thread.
Dim task As ChilkatTask
Set task = compress.DecompressStreamAsync(streamA)
success = task.Run()

' Read decompressed data from streamA:
Dim decompressedText As String
Do While (streamA.EndOfStream <> 1)
    If (streamA.DataAvailable = 1) Then
        decompressedText = streamA.ReadString()
        Debug.Print decompressedText
    End If

Loop

' Let's make sure the background task finished and that the decompress was successful.
' It should already be the case that the task is finished.
Do While (task.Finished <> 1)
    task.SleepMs 20
Loop

' The decompressor may have finished, but it is possible that data
' remains to be flushed.  
If (streamA.DataAvailable = 1) Then
    decompressedText = streamA.ReadString()
    Debug.Print decompressedText
End If

' Did streamA succeed in reading the entire file?
If (task.TaskSuccess <> 1) Then
    Debug.Print "async decompress failed:"
    Debug.Print task.ResultErrorText
    success = 0
End If

Debug.Print "The async decompress was successful."