PureBasic Requires Chilkat v11.0.0+
PureBasic
Compress Large Binary File in Blocks
See more Compression Examples
Compresses a large binary file in blocks.Chilkat PureBasic Downloads
IncludeFile "CkCompression.pb"
IncludeFile "CkFileAccess.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes 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 large binary file for reading.
success = CkFileAccess::ckOpenForRead(facSrc,"qa_data/bmp/big.bmp")
If success = 0
Debug CkFileAccess::ckLastErrorText(facSrc)
CkFileAccess::ckDispose(facSrc)
CkFileAccess::ckDispose(facDest)
ProcedureReturn
EndIf
; If we compress in 64K chunks, find out how many blocks there will be.
blockSize.i = 65536
numBlocks.i = CkFileAccess::ckGetNumBlocks(facSrc,blockSize)
; Open an output file for the compressed data.
success = CkFileAccess::ckOpenForWrite(facDest,"c:/temp/qa_output/compressedBmp.dat")
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
fileBytes = CkFileAccess::ckReadBlock(facSrc,i,blockSize)
compressedBytes = CkCompression::ckCompressBytes(compress,fileBytes)
CkFileAccess::ckFileWrite(facDest,compressedBytes)
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 compressing file."
CkFileAccess::ckDispose(facSrc)
CkFileAccess::ckDispose(facDest)
CkCompression::ckDispose(compress)
ProcedureReturn
EndProcedure