Unicode C
Unicode C
Decompress Large Binary File in Blocks
See more Compression Examples
Decompresses a large binary file in blocks.Chilkat Unicode C Downloads
#include <C_CkFileAccessW.h>
#include <C_CkCompressionW.h>
#include <C_CkByteData.h>
void ChilkatSample(void)
{
BOOL success;
HCkFileAccessW facSrc;
HCkFileAccessW facDest;
int blockSize;
int numBlocks;
HCkCompressionW 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 = CkFileAccessW_Create();
facDest = CkFileAccessW_Create();
// Open a previously compressed file for decompressing.
// See Compress Large File in Blocks
success = CkFileAccessW_OpenForRead(facSrc,L"c:/temp/qa_output/compressedBmp.dat");
if (success == FALSE) {
wprintf(L"%s\n",CkFileAccessW_lastErrorText(facSrc));
CkFileAccessW_Dispose(facSrc);
CkFileAccessW_Dispose(facDest);
return;
}
// If we compress in 32K chunks, find out how many blocks there will be.
blockSize = 32768;
numBlocks = CkFileAccessW_GetNumBlocks(facSrc,blockSize);
// Open an output file for the decompressed data.
success = CkFileAccessW_OpenForWrite(facDest,L"c:/temp/qa_output/decompressed.bmp");
if (success == FALSE) {
wprintf(L"%s\n",CkFileAccessW_lastErrorText(facDest));
CkFileAccessW_Dispose(facSrc);
CkFileAccessW_Dispose(facDest);
return;
}
compress = CkCompressionW_Create();
CkCompressionW_putAlgorithm(compress,L"deflate");
decompressedBytes = CkByteData_Create();
compressedBytes = CkByteData_Create();
// Assuming numBlocks > 1
CkCompressionW_putFirstChunk(compress,TRUE);
CkCompressionW_putLastChunk(compress,FALSE);
i = 0;
while (i < numBlocks) {
success = CkFileAccessW_ReadBlock(facSrc,i,blockSize,compressedBytes);
success = CkCompressionW_DecompressBytes(compress,compressedBytes,decompressedBytes);
CkFileAccessW_FileWrite(facDest,decompressedBytes);
i = i + 1;
CkCompressionW_putFirstChunk(compress,FALSE);
if (i == (numBlocks - 1)) {
CkCompressionW_putLastChunk(compress,TRUE);
}
}
CkFileAccessW_FileClose(facSrc);
CkFileAccessW_FileClose(facDest);
wprintf(L"Finished decompressing file.\n");
CkFileAccessW_Dispose(facSrc);
CkFileAccessW_Dispose(facDest);
CkCompressionW_Dispose(compress);
CkByteData_Dispose(decompressedBytes);
CkByteData_Dispose(compressedBytes);
}