PureBasic Requires Chilkat v11.0.0+
PureBasic
Decompress Large Binary File in Blocks
See more Compression Examples
Decompresses a large binary file in blocks.Chilkat PureBasic Downloads
IncludeFile "CkCompression.pb"
IncludeFile "CkFileAccess.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
facSrc.i = CkFileAccess::ckCreate()
If facSrc.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
facDest.i = CkFileAccess::ckCreate()
If facDest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Open a previously compressed file for decompressing.
; See Compress Large File in Blocks
success = CkFileAccess::ckOpenForRead(facSrc,"c:/temp/qa_output/compressedBmp.dat")
If success = 0
Debug CkFileAccess::ckLastErrorText(facSrc)
CkFileAccess::ckDispose(facSrc)
CkFileAccess::ckDispose(facDest)
ProcedureReturn
EndIf
; If we compress in 32K chunks, find out how many blocks there will be.
blockSize.i = 32768
numBlocks.i = CkFileAccess::ckGetNumBlocks(facSrc,blockSize)
; Open an output file for the decompressed data.
success = CkFileAccess::ckOpenForWrite(facDest,"c:/temp/qa_output/decompressed.bmp")
If success = 0
Debug CkFileAccess::ckLastErrorText(facDest)
CkFileAccess::ckDispose(facSrc)
CkFileAccess::ckDispose(facDest)
ProcedureReturn
EndIf
compress.i = CkCompression::ckCreate()
If compress.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkCompression::setCkAlgorithm(compress, "deflate")
ERROR - PureBasic is an array language
ERROR - PureBasic is an array language
; Assuming numBlocks > 1
CkCompression::setCkFirstChunk(compress, 1)
CkCompression::setCkLastChunk(compress, 0)
i.i = 0
While i < numBlocks
compressedBytes = CkFileAccess::ckReadBlock(facSrc,i,blockSize)
decompressedBytes = CkCompression::ckDecompressBytes(compress,compressedBytes)
CkFileAccess::ckFileWrite(facDest,decompressedBytes)
i = i + 1
CkCompression::setCkFirstChunk(compress, 0)
If i = (numBlocks - 1)
CkCompression::setCkLastChunk(compress, 1)
EndIf
Wend
CkFileAccess::ckFileClose(facSrc)
CkFileAccess::ckFileClose(facDest)
Debug "Finished decompressing file."
CkFileAccess::ckDispose(facSrc)
CkFileAccess::ckDispose(facDest)
CkCompression::ckDispose(compress)
ProcedureReturn
EndProcedure