Sample code for 30+ languages & platforms
DataFlex

Create Zip in a BinData Object

See more Zip Examples

Recursively appends files in a directory tree and writes a zip archive into a Chilkat BinData object.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoZip
    Boolean iRecurse
    Variant vBdZip
    Handle hoBdZip
    String sZipAsBase64
    String sTemp1

    Move False To iSuccess

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

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

    // Initialize the zip object.  Because we will never actually write a zip file to the filesystem,
    // the filepath passed to NewZip does not matter.
    Get ComNewZip Of hoZip "x.zip" To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Append a directory tree.  The call to AppendFiles does
    // not read the file contents or append them to the zip
    // object in memory.  It simply appends references
    // to the files so that when WriteBd, WriteZip, or WriteZipAndClose 
    // is called, the referenced files are streamed and compressed
    // into the .zip output file (or BinData object).

    Move True To iRecurse
    Get ComAppendFiles Of hoZip "c:/temp/a/*" iRecurse To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Write the zip archive into the bdZip object.
    Get Create (RefClass(cComChilkatBinData)) To hoBdZip
    If (Not(IsComObjectCreated(hoBdZip))) Begin
        Send CreateComObject of hoBdZip
    End
    Get pvComObject of hoBdZip to vBdZip
    Get ComWriteBd Of hoZip vBdZip To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // We could directly access the bytes of the zip archive, or perhaps
    // get the zip bytes in base64 format.
    Get ComGetEncoded Of hoBdZip "base64" To sZipAsBase64
    Showln sZipAsBase64

    // Or the zip can be used by some other Chilkat method call that accepts
    // a BinData object as an argument.


End_Procedure