Unicode C
Unicode C
Compress Large Binary File in Blocks
See more Compression Examples
Compresses 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 fileBytes;
HCkByteData compressedBytes;
int i;
success = FALSE;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
facSrc = CkFileAccessW_Create();
facDest = CkFileAccessW_Create();
// Open a large binary file for reading.
success = CkFileAccessW_OpenForRead(facSrc,L"qa_data/bmp/big.bmp");
if (success == FALSE) {
wprintf(L"%s\n",CkFileAccessW_lastErrorText(facSrc));
CkFileAccessW_Dispose(facSrc);
CkFileAccessW_Dispose(facDest);
return;
}
// If we compress in 64K chunks, find out how many blocks there will be.
blockSize = 65536;
numBlocks = CkFileAccessW_GetNumBlocks(facSrc,blockSize);
// Open an output file for the compressed data.
success = CkFileAccessW_OpenForWrite(facDest,L"c:/temp/qa_output/compressedBmp.dat");
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");
fileBytes = 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,fileBytes);
success = CkCompressionW_CompressBytes(compress,fileBytes,compressedBytes);
CkFileAccessW_FileWrite(facDest,compressedBytes);
i = i + 1;
CkCompressionW_putFirstChunk(compress,FALSE);
if (i == (numBlocks - 1)) {
CkCompressionW_putLastChunk(compress,TRUE);
}
}
CkFileAccessW_FileClose(facSrc);
CkFileAccessW_FileClose(facDest);
wprintf(L"Finished compressing file.\n");
CkFileAccessW_Dispose(facSrc);
CkFileAccessW_Dispose(facDest);
CkCompressionW_Dispose(compress);
CkByteData_Dispose(fileBytes);
CkByteData_Dispose(compressedBytes);
}