Sample code for 30+ languages & platforms
Visual FoxPro

Transition from Compression.BeginCompressBytes to FirstChunk/LastChunk

Provides instructions for replacing deprecated BeginCompressBytes method calls with using FirstChunk and LastChunk properties.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loFacSrc
LOCAL loFacDest
LOCAL lnBlockSize
LOCAL lnNumBlocks
LOCAL loCompress
LOCAL loFileBytes
LOCAL loCompressedBytes
LOCAL i

lnSuccess = 0

loFacSrc = CreateObject('Chilkat.FileAccess')
loFacDest = CreateObject('Chilkat.FileAccess')

* Open a large binary file for reading.
lnSuccess = loFacSrc.OpenForRead("qa_data/bmp/big.bmp")
IF (lnSuccess = 0) THEN
    ? loFacSrc.LastErrorText
    RELEASE loFacSrc
    RELEASE loFacDest
    CANCEL
ENDIF

* If we compress in 64K chunks, find out how many blocks there will be.
lnBlockSize = 65536
lnNumBlocks = loFacSrc.GetNumBlocks(lnBlockSize)

* Open an output file for the compressed data.
lnSuccess = loFacDest.OpenForWrite("c:/temp/qa_output/compressedBmp.dat")
IF (lnSuccess = 0) THEN
    ? loFacDest.LastErrorText
    RELEASE loFacSrc
    RELEASE loFacDest
    CANCEL
ENDIF

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

* ----------------------------------------------------------------------------------
* This is the deprecated way of compressing in chunks using Begin/More/End methods..
* ----------------------------------------------------------------------------------
i = 0
DO WHILE i < lnNumBlocks
    loFileBytes = loFacSrc.ReadBlock(i,lnBlockSize)
    IF (i = 0) THEN
        loCompressedBytes = loCompress.BeginCompressBytes(loFileBytes)
    ELSE
        loCompressedBytes = loCompress.MoreCompressBytes(loFileBytes)
    ENDIF

    loFacDest.FileWrite(loCompressedBytes)

    i = i + 1
ENDDO

* At the very end, flush any remaining compressed bytes, if any.
loCompressedBytes = loCompress.EndCompressBytes()
loFacDest.FileWrite(loCompressedBytes)

loFacSrc.FileClose()
loFacDest.FileClose()

? "Finished compressing file."

* ----------------------------------------------------------------------------------
* This is new way of compressing in chunks using FirstChunk and LastChunk properties
* ----------------------------------------------------------------------------------

lnSuccess = loFacSrc.OpenForRead("qa_data/bmp/big.bmp")
IF (lnSuccess = 0) THEN
    ? loFacSrc.LastErrorText
    RELEASE loFacSrc
    RELEASE loFacDest
    RELEASE loCompress
    CANCEL
ENDIF

lnSuccess = loFacDest.OpenForWrite("c:/temp/qa_output/compressedBmp2.dat")
IF (lnSuccess = 0) THEN
    ? loFacDest.LastErrorText
    RELEASE loFacSrc
    RELEASE loFacDest
    RELEASE loCompress
    CANCEL
ENDIF

* Assuming numBlocks > 1
loCompress.FirstChunk = 1
loCompress.LastChunk = 0

i = 0
DO WHILE i < lnNumBlocks
    loFileBytes = loFacSrc.ReadBlock(i,lnBlockSize)
    loCompressedBytes = loCompress.CompressBytes(loFileBytes)

    loFacDest.FileWrite(loCompressedBytes)

    i = i + 1

    loCompress.FirstChunk = 0
    IF (i = (lnNumBlocks - 1)) THEN
        loCompress.LastChunk = 1
    ENDIF

ENDDO

loFacSrc.FileClose()
loFacDest.FileClose()

? "Finished compressing file 2."

RELEASE loFacSrc
RELEASE loFacDest
RELEASE loCompress