Sample code for 30+ languages & platforms
DataFlex

Creates an AES Encrypted Zip with One File Unencrypted

See more Zip Examples

Demonstrates how to create an AES encrypted zip, but also containing one file that is not encrypted. The way we do it is to first create an AES encrypted zip in the usual way, and then we append an unecrypted file to it.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoZip
    Variant vSaExclusions
    Handle hoSaExclusions
    Boolean iRecurse
    Boolean iSaveExtraPath
    String sTemp1

    Move False To iSuccess

    // This example requires 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

    Get ComNewZip Of hoZip "qa_output/aes_with_one_unencrypted.zip" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Set properties to indicate that the Zip should be
    // AES encrypted.

    // A value of 4 indicates WinZip compatible AES encryption.
    Set ComEncryption Of hoZip To 4

    // Key length can be 128, 192, or 256 bits.
    Set ComEncryptKeyLength Of hoZip To 128

    // Set the password for AES encryption:
    Set ComEncryptPassword Of hoZip To "myPassword"

    // Exclude the file helloWorld.txt
    // This file will be added unencrypted to the .zip
    Get Create (RefClass(cComCkStringArray)) To hoSaExclusions
    If (Not(IsComObjectCreated(hoSaExclusions))) Begin
        Send CreateComObject of hoSaExclusions
    End
    Get ComAppend Of hoSaExclusions "helloWorld.txt" To iSuccess
    Get pvComObject of hoSaExclusions to vSaExclusions
    Send ComSetExclusions To hoZip vSaExclusions

    Set ComVerboseLogging Of hoZip To True

    // Add a directory tree to be zipped.
    Move True To iRecurse
    // Append from a directory relative to our current working directory.
    Set ComAppendFromDir Of hoZip To "qa_data/filesToZip"
    Get ComAppendFiles Of hoZip "*" iRecurse To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComLastErrorText Of hoZip To sTemp1
    Showln sTemp1

    // Writes qa_output/aes_with_one_unencrypted.zip
    Get ComWriteZipAndClose Of hoZip To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // ----------------------------------------------
    // At this point, we have an encrypted .zip with all 
    // files except for helloWorld.txt.
    // We'll add helloWorld.txt (unencrypted) to the .zip we just created.

    // The NewZip method only initializes the Zip object -- it does
    // not create or write a .zip file.

    Get ComNewZip Of hoZip "notUsed.zip" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Send ComClear To hoSaExclusions
    Get pvComObject of hoSaExclusions to vSaExclusions
    Send ComSetExclusions To hoZip vSaExclusions

    // No encryption.
    Set ComEncryption Of hoZip To 0

    Set ComAppendFromDir Of hoZip To "qa_data/filesToZip"

    // Add a reference to a file.  This is the file that will
    // be added to a already-existing .zip.  
    Move False To iSaveExtraPath
    Get ComAddFile Of hoZip "helloWorld.txt" iSaveExtraPath To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Appends the contents of the zip object to the preExisting.zip
    // zip archive.  preExisting.zip is opened, and the files
    // referenced by this zip object are streamed in, compressed,
    // and appended to the end of the archive.
    Get ComQuickAppend Of hoZip "qa_output/aes_with_one_unencrypted.zip" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoZip To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "Success!"


End_Procedure