C
C
Decompress Large Binary File in Blocks
See more Compression Examples
Decompresses a large binary file in blocks.Chilkat C Downloads
#include <C_CkFileAccess.h>
#include <C_CkCompression.h>
#include <C_CkByteData.h>
void ChilkatSample(void)
{
BOOL success;
HCkFileAccess facSrc;
HCkFileAccess facDest;
int blockSize;
int numBlocks;
HCkCompression compress;
HCkByteData decompressedBytes;
HCkByteData compressedBytes;
int i;
success = FALSE;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
facSrc = CkFileAccess_Create();
facDest = CkFileAccess_Create();
// Open a previously compressed file for decompressing.
// See Compress Large File in Blocks
success = CkFileAccess_OpenForRead(facSrc,"c:/temp/qa_output/compressedBmp.dat");
if (success == FALSE) {
printf("%s\n",CkFileAccess_lastErrorText(facSrc));
CkFileAccess_Dispose(facSrc);
CkFileAccess_Dispose(facDest);
return;
}
// If we compress in 32K chunks, find out how many blocks there will be.
blockSize = 32768;
numBlocks = CkFileAccess_GetNumBlocks(facSrc,blockSize);
// Open an output file for the decompressed data.
success = CkFileAccess_OpenForWrite(facDest,"c:/temp/qa_output/decompressed.bmp");
if (success == FALSE) {
printf("%s\n",CkFileAccess_lastErrorText(facDest));
CkFileAccess_Dispose(facSrc);
CkFileAccess_Dispose(facDest);
return;
}
compress = CkCompression_Create();
CkCompression_putAlgorithm(compress,"deflate");
decompressedBytes = CkByteData_Create();
compressedBytes = CkByteData_Create();
// Assuming numBlocks > 1
CkCompression_putFirstChunk(compress,TRUE);
CkCompression_putLastChunk(compress,FALSE);
i = 0;
while (i < numBlocks) {
success = CkFileAccess_ReadBlock(facSrc,i,blockSize,compressedBytes);
success = CkCompression_DecompressBytes(compress,compressedBytes,decompressedBytes);
CkFileAccess_FileWrite(facDest,decompressedBytes);
i = i + 1;
CkCompression_putFirstChunk(compress,FALSE);
if (i == (numBlocks - 1)) {
CkCompression_putLastChunk(compress,TRUE);
}
}
CkFileAccess_FileClose(facSrc);
CkFileAccess_FileClose(facDest);
printf("Finished decompressing file.\n");
CkFileAccess_Dispose(facSrc);
CkFileAccess_Dispose(facDest);
CkCompression_Dispose(compress);
CkByteData_Dispose(decompressedBytes);
CkByteData_Dispose(compressedBytes);
}