Sample code for 30+ languages & platforms
PureBasic

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

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

Procedure ChilkatExample()

    success.i = 0

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

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

    ; Initialize the zip object.  Because we will never actually write a zip file to the filesystem,
    ; the filepath passed to NewZip does not matter.
    success = CkZip::ckNewZip(zip,"x.zip")
    If success <> 1
        Debug CkZip::ckLastErrorText(zip)
        CkZip::ckDispose(zip)
        ProcedureReturn
    EndIf

    ; 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).

    recurse.i = 1
    success = CkZip::ckAppendFiles(zip,"c:/temp/a/*",recurse)
    If success <> 1
        Debug CkZip::ckLastErrorText(zip)
        CkZip::ckDispose(zip)
        ProcedureReturn
    EndIf

    ; Write the zip archive into the bdZip object.
    bdZip.i = CkBinData::ckCreate()
    If bdZip.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkZip::ckWriteBd(zip,bdZip)
    If success <> 1
        Debug CkZip::ckLastErrorText(zip)
        CkZip::ckDispose(zip)
        CkBinData::ckDispose(bdZip)
        ProcedureReturn
    EndIf

    ; We could directly access the bytes of the zip archive, or perhaps
    ; get the zip bytes in base64 format.
    zipAsBase64.s = CkBinData::ckGetEncoded(bdZip,"base64")
    Debug zipAsBase64

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


    CkZip::ckDispose(zip)
    CkBinData::ckDispose(bdZip)


    ProcedureReturn
EndProcedure