Sample code for 30+ languages & platforms
Visual FoxPro

Decompress Large Binary File in Blocks

See more Compression Examples

Decompresses a large binary file in blocks.

Chilkat Visual FoxPro Downloads

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

lnSuccess = 0

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

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

* Open a previously compressed file for decompressing.
* See Compress Large File in Blocks

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

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

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

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

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

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

    loDecompressedBytes = loCompress.DecompressBytes(loCompressedBytes)
    loFacDest.FileWrite(loDecompressedBytes)

    i = i + 1

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

ENDDO

loFacSrc.FileClose()
loFacDest.FileClose()

? "Finished decompressing file."

RELEASE loFacSrc
RELEASE loFacDest
RELEASE loCompress