Visual FoxPro
Visual FoxPro
Compress Large Binary File in Blocks
See more Compression Examples
Compresses a large binary file in blocks.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loFacSrc
LOCAL loFacDest
LOCAL lnBlockSize
LOCAL lnNumBlocks
LOCAL loCompress
LOCAL loFileBytes
LOCAL loCompressedBytes
LOCAL i
lnSuccess = 0
* This example assumes 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 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"
* 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."
RELEASE loFacSrc
RELEASE loFacDest
RELEASE loCompress