Visual FoxPro
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
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