VBScript
VBScript
Streaming Compression
See more Compression Examples
Compress and decompress using a stream.Chilkat VBScript Downloads
Dim fso, outFile
Set fso = CreateObject("Scripting.FileSystemObject")
'Create a Unicode (utf-16) output text file.
Set outFile = fso.CreateTextFile("output.txt", True, True)
success = 0
' This example assumes the Chilkat API to have been previously unlocked.
' See Global Unlock Sample for sample code.
set fac = CreateObject("Chilkat.FileAccess")
set compress = CreateObject("Chilkat.Compression")
compress.Algorithm = "deflate"
set streamC = CreateObject("Chilkat.Stream")
' 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
outFile.WriteLine(compress.LastErrorText)
WScript.Quit
End If
outFile.WriteLine("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.
outFile.WriteLine("Original size = " & fac.FileSize(streamC.SourceFile))
outFile.WriteLine("Compressed size = " & fac.FileSize(streamC.SinkFile))
' Now do file-to-file decompression
set streamD = CreateObject("Chilkat.Stream")
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
outFile.WriteLine(compress.LastErrorText)
WScript.Quit
End If
outFile.WriteLine("File-to-file deflate decompression successful.")
' Let's double-check to see that the files are equal in size and content:
bFilesEqual = fac.FileContentsEqual(streamC.SourceFile,streamD.SinkFile)
If (bFilesEqual <> 1) Then
outFile.WriteLine("The output file is not equal to the input file!")
Else
outFile.WriteLine("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.
set streamA = CreateObject("Chilkat.Stream")
streamA.SourceFile = "qa_output/hamlet_compressed.dat"
' Start decompressing in a background thread.
' task is a Chilkat.Task
Set task = compress.DecompressStreamAsync(streamA)
success = task.Run()
' Read decompressed data from streamA:
Do While (streamA.EndOfStream <> 1)
If (streamA.DataAvailable = 1) Then
decompressedText = streamA.ReadString()
outFile.WriteLine(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()
outFile.WriteLine(decompressedText)
End If
' Did streamA succeed in reading the entire file?
If (task.TaskSuccess <> 1) Then
outFile.WriteLine("async decompress failed:")
outFile.WriteLine(task.ResultErrorText)
success = 0
End If
outFile.WriteLine("The async decompress was successful.")
outFile.Close