Sample code for 30+ languages & platforms
Tcl

Unzip a ZIP Entry Directly into a BinData Object Using ZipEntry.UnzipToBd

See more Zip Examples

This example demonstrates how to use the ZipEntry.UnzipToBd method to inflate a ZIP entry directly into a BinData object.

The entry contents are uncompressed entirely in memory without creating a file on disk.

This is useful when:

  • Processing ZIP entry data entirely in memory
  • Avoiding temporary filesystem files
  • Working with binary files such as images, PDFs, or certificates
  • Passing uncompressed ZIP data directly to other APIs

The example opens a ZIP archive, locates a PDF entry, inflates it into a BinData object, and then writes the uncompressed bytes to a new file.

Suppose the ZIP archive contains:

docs/report.pdf

The entry is uncompressed directly into memory before optionally being saved to:

qa_output/report.pdf

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set zip [new_CkZip]

# Open an existing ZIP archive.
set success [CkZip_OpenZip $zip "qa_data/zips/documents.zip"]
if {$success == 0} then {
    puts [CkZip_lastErrorText $zip]
    delete_CkZip $zip
    exit
}

# Locate the PDF entry within the ZIP archive.
set entry [new_CkZipEntry]

set success [CkZip_EntryOf $zip "docs/report.pdf" $entry]
if {$success == 0} then {
    puts "ZIP entry not found."
    CkZip_CloseZip $zip
    delete_CkZip $zip
    delete_CkZipEntry $entry
    exit
}

# ------------------------------------------------------------
# Inflate the ZIP entry directly into a BinData object.
# 
# The uncompressed bytes are stored entirely in memory.
# 
set pdfData [new_CkBinData]

set success [CkZipEntry_UnzipToBd $entry $pdfData]
if {$success == 0} then {
    puts [CkZipEntry_lastErrorText $entry]
    delete_CkZip $zip
    delete_CkZipEntry $entry
    delete_CkBinData $pdfData
    exit
}

puts "Uncompressed size = [CkBinData_get_NumBytes $pdfData]"
puts 

# ------------------------------------------------------------
# Optionally save the uncompressed bytes to a file.
# 
set success [CkBinData_WriteFile $pdfData "qa_output/report.pdf"]
if {$success == 0} then {
    puts [CkBinData_lastErrorText $pdfData]
    delete_CkZip $zip
    delete_CkZipEntry $entry
    delete_CkBinData $pdfData
    exit
}

CkZip_CloseZip $zip

puts "PDF extracted successfully."

delete_CkZip $zip
delete_CkZipEntry $entry
delete_CkBinData $pdfData