Sample code for 30+ languages & platforms
Visual FoxPro

Compress and Encrypt a Large File (Low and Constant Memory Footprint)

See more Compression Examples

Demonstrates how to compress and encrypt a large file such that the memory footprint remains low and constant.

Note: This example requires Chilkat v9.5.0.99 or greater.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loCompress
LOCAL loJson
LOCAL lcInPath
LOCAL lcOutPath
LOCAL lcInPath2
LOCAL lcOutPath2
LOCAL loCrypt
LOCAL lcDecryptedPath
LOCAL lcOutPath3

lnSuccess = 0

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

loCompress = CreateObject('Chilkat.Compression')
loCompress.Algorithm = "deflate"

* Set encryption params.
* The possible values are the same as for the corresponding properties in the Chilkat Crypt2 class/object.
* The encoded IV and Key must be specified as hex.
loJson = CreateObject('Chilkat.JsonObject')
loJson.UpdateString("cryptAlgorithm","aes")
loJson.UpdateString("cipherMode","cbc")
loJson.UpdateInt("keyLength",128)
loJson.UpdateInt("paddingScheme",0)
loJson.UpdateString("encodedIV","000102030405060708090A0B0C0D0E0F")
loJson.UpdateString("encodedKey","000102030405060708090A0B0C0D0E0F")

* Do file-to-file compression+encryption in a single call.
lcInPath = "qa_data/largeFile.dat"
lcOutPath = "c:/temp/qa_output/compressed_encrypted.dat"
lnSuccess = loCompress.CompressEncryptFile(loJson,lcInPath,lcOutPath)
IF (lnSuccess = 0) THEN
    ? loCompress.LastErrorText
    RELEASE loCompress
    RELEASE loJson
    CANCEL
ENDIF

* We can do file-to-file decrypt/decompress like this:
lcInPath2 = lcOutPath
lcOutPath2 = "c:/temp/qa_output/restored.dat"
lnSuccess = loCompress.DecryptDecompressFile(loJson,lcInPath2,lcOutPath2)
IF (lnSuccess = 0) THEN
    ? loCompress.LastErrorText
    RELEASE loCompress
    RELEASE loJson
    CANCEL
ENDIF

* Note: The above decrypt + decompress is the equivalent of doing the same in these two steps:
loCrypt = CreateObject('Chilkat.Crypt2')
loCrypt.CryptAlgorithm = "aes"
loCrypt.CipherMode = "cbc"
loCrypt.KeyLength = 128
loCrypt.PaddingScheme = 0
loCrypt.SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex")
loCrypt.SetEncodedKey("000102030405060708090A0B0C0D0E0F","hex")

lcDecryptedPath = "c:/temp/qa_output/decrypted.dat"
lnSuccess = loCrypt.CkDecryptFile(lcInPath2,lcDecryptedPath)
IF (lnSuccess = 0) THEN
    ? loCrypt.LastErrorText
    RELEASE loCompress
    RELEASE loJson
    RELEASE loCrypt
    CANCEL
ENDIF

lcOutPath3 = "c:/temp/qa_output/restored_in_two_steps.dat"
lnSuccess = loCompress.DecompressFile(lcDecryptedPath,lcOutPath3)
IF (lnSuccess = 0) THEN
    ? loCompress.LastErrorText
    RELEASE loCompress
    RELEASE loJson
    RELEASE loCrypt
    CANCEL
ENDIF

? "Success."

RELEASE loCompress
RELEASE loJson
RELEASE loCrypt