Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkZipEntry.pb"
IncludeFile "CkZip.pb"
IncludeFile "CkBinData.pb"

Procedure ChilkatExample()

    success.i = 0

    zip.i = CkZip::ckCreate()
    If zip.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Open an existing ZIP archive.
    success = CkZip::ckOpenZip(zip,"qa_data/zips/documents.zip")
    If success = 0
        Debug CkZip::ckLastErrorText(zip)
        CkZip::ckDispose(zip)
        ProcedureReturn
    EndIf

    ; Locate the PDF entry within the ZIP archive.
    entry.i = CkZipEntry::ckCreate()
    If entry.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkZip::ckEntryOf(zip,"docs/report.pdf",entry)
    If success = 0
        Debug "ZIP entry not found."
        CkZip::ckCloseZip(zip)
        CkZip::ckDispose(zip)
        CkZipEntry::ckDispose(entry)
        ProcedureReturn
    EndIf

    ; ------------------------------------------------------------
    ; Inflate the ZIP entry directly into a BinData object.
    ; 
    ; The uncompressed bytes are stored entirely in memory.
    ; 
    pdfData.i = CkBinData::ckCreate()
    If pdfData.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkZipEntry::ckUnzipToBd(entry,pdfData)
    If success = 0
        Debug CkZipEntry::ckLastErrorText(entry)
        CkZip::ckDispose(zip)
        CkZipEntry::ckDispose(entry)
        CkBinData::ckDispose(pdfData)
        ProcedureReturn
    EndIf

    Debug "Uncompressed size = " + Str(CkBinData::ckNumBytes(pdfData))
    Debug ""

    ; ------------------------------------------------------------
    ; Optionally save the uncompressed bytes to a file.
    ; 
    success = CkBinData::ckWriteFile(pdfData,"qa_output/report.pdf")
    If success = 0
        Debug CkBinData::ckLastErrorText(pdfData)
        CkZip::ckDispose(zip)
        CkZipEntry::ckDispose(entry)
        CkBinData::ckDispose(pdfData)
        ProcedureReturn
    EndIf

    CkZip::ckCloseZip(zip)

    Debug "PDF extracted successfully."


    CkZip::ckDispose(zip)
    CkZipEntry::ckDispose(entry)
    CkBinData::ckDispose(pdfData)


    ProcedureReturn
EndProcedure