Sample code for 30+ languages & platforms
DataFlex

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

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoZip
    Variant vEntry
    Handle hoEntry
    Variant vPdfData
    Handle hoPdfData
    String sTemp1
    Integer iTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatZip)) To hoZip
    If (Not(IsComObjectCreated(hoZip))) Begin
        Send CreateComObject of hoZip
    End

    // Open an existing ZIP archive.
    Get ComOpenZip Of hoZip "qa_data/zips/documents.zip" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Locate the PDF entry within the ZIP archive.
    Get Create (RefClass(cComChilkatZipEntry)) To hoEntry
    If (Not(IsComObjectCreated(hoEntry))) Begin
        Send CreateComObject of hoEntry
    End

    Get pvComObject of hoEntry to vEntry
    Get ComEntryOf Of hoZip "docs/report.pdf" vEntry To iSuccess
    If (iSuccess = False) Begin
        Showln "ZIP entry not found."
        Send ComCloseZip To hoZip
        Procedure_Return
    End

    // ------------------------------------------------------------
    // Inflate the ZIP entry directly into a BinData object.
    // 
    // The uncompressed bytes are stored entirely in memory.
    // 
    Get Create (RefClass(cComChilkatBinData)) To hoPdfData
    If (Not(IsComObjectCreated(hoPdfData))) Begin
        Send CreateComObject of hoPdfData
    End

    Get pvComObject of hoPdfData to vPdfData
    Get ComUnzipToBd Of hoEntry vPdfData To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoEntry To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComNumBytes Of hoPdfData To iTemp1
    Showln "Uncompressed size = " iTemp1
    Showln ""

    // ------------------------------------------------------------
    // Optionally save the uncompressed bytes to a file.
    // 
    Get ComWriteFile Of hoPdfData "qa_output/report.pdf" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoPdfData To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Send ComCloseZip To hoZip

    Showln "PDF extracted successfully."


End_Procedure