Lianja Requires Chilkat v11.0.0+
Lianja
Decompress Large Binary File in Blocks
See more Compression Examples
Decompresses a large binary file in blocks.Chilkat Lianja Downloads
llSuccess = .F.
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
loFacSrc = createobject("CkFileAccess")
loFacDest = createobject("CkFileAccess")
// Open a previously compressed file for decompressing.
// See Compress Large File in Blocks
llSuccess = loFacSrc.OpenForRead("c:/temp/qa_output/compressedBmp.dat")
if (llSuccess = .F.) then
? loFacSrc.LastErrorText
release loFacSrc
release loFacDest
return
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.
llSuccess = loFacDest.OpenForWrite("c:/temp/qa_output/decompressed.bmp")
if (llSuccess = .F.) then
? loFacDest.LastErrorText
release loFacSrc
release loFacDest
return
endif
loCompress = createobject("CkCompression")
loCompress.Algorithm = "deflate"
// Assuming numBlocks > 1
loCompress.FirstChunk = .T.
loCompress.LastChunk = .F.
i = 0
do while i < lnNumBlocks
loCompressedBytes = loFacSrc.ReadBlock(i,lnBlockSize)
loDecompressedBytes = loCompress.DecompressBytes(loCompressedBytes)
loFacDest.FileWrite(loDecompressedBytes)
i = i + 1
loCompress.FirstChunk = .F.
if (i = (lnNumBlocks - 1)) then
loCompress.LastChunk = .T.
endif
enddo
loFacSrc.FileClose()
loFacDest.FileClose()
? "Finished decompressing file."
release loFacSrc
release loFacDest
release loCompress