C
C
Transition from BeginCompressStringENC to FirstChunk/LastChunk
Provides instructions for replacing deprecated BeginCompressStringENC method calls with using FirstChunk/LastChunk properties.Chilkat C Downloads
#include <C_CkStringBuilder.h>
#include <C_CkCompression.h>
#include <C_CkBinData.h>
void ChilkatSample(void)
{
BOOL success;
HCkStringBuilder sbCompressedBase64;
HCkCompression compress;
HCkStringBuilder sbIndex;
int i;
const char *originalText;
HCkBinData bdCompressed;
HCkStringBuilder sbUncompressedChunk;
success = FALSE;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
sbCompressedBase64 = CkStringBuilder_Create();
compress = CkCompression_Create();
CkCompression_putAlgorithm(compress,"deflate");
CkCompression_putCharset(compress,"utf-8");
CkCompression_putEncodingMode(compress,"base64");
sbIndex = CkStringBuilder_Create();
// ----------------------------------------------------------------------------------
// This is the deprecated way of compressing in chunks using Begin/More/End methods..
// ----------------------------------------------------------------------------------
for (i = 0; i <= 24; i++) {
// Note: It is possible (and normal) for a BeginCompress* or MoreCompress* method to return
// an empty string (or 0 bytes). When this happens, the input data is not lost. It will be flushed
// in a subsequent call.
CkStringBuilder_Clear(sbIndex);
CkStringBuilder_AppendInt(sbIndex,i);
if (i == 0) {
CkStringBuilder_Append(sbCompressedBase64,CkCompression_beginCompressStringENC(compress,CkStringBuilder_getAsString(sbIndex)));
}
else {
CkStringBuilder_Append(sbCompressedBase64,CkCompression_moreCompressStringENC(compress,CkStringBuilder_getAsString(sbIndex)));
}
CkStringBuilder_Append(sbCompressedBase64,CkCompression_moreCompressStringENC(compress,": This is a line of data to be compressed...\r\n"));
}
// Flush any remaining output.
CkStringBuilder_Append(sbCompressedBase64,CkCompression_endCompressStringENC(compress));
printf("The base64 encoded compressed text:\n");
printf("%s\n",CkStringBuilder_getAsString(sbCompressedBase64));
// Decompress in one call:
originalText = CkCompression_decompressStringENC(compress,CkStringBuilder_getAsString(sbCompressedBase64));
printf("%s\n",originalText);
// ----------------------------------------------------------------------------------
// This is new way of compressing in chunks using FirstChunk and LastChunk properties
// ----------------------------------------------------------------------------------
CkStringBuilder_Clear(sbCompressedBase64);
CkCompression_putFirstChunk(compress,TRUE);
CkCompression_putLastChunk(compress,FALSE);
bdCompressed = CkBinData_Create();
sbUncompressedChunk = CkStringBuilder_Create();
for (i = 0; i <= 24; i++) {
if (i == 24) {
CkCompression_putLastChunk(compress,TRUE);
}
CkStringBuilder_Clear(sbUncompressedChunk);
CkStringBuilder_AppendInt(sbUncompressedChunk,i);
CkStringBuilder_Append(sbUncompressedChunk,": This is a line of data to be compressed...\r\n");
CkCompression_CompressSb(compress,sbUncompressedChunk,bdCompressed);
CkCompression_putFirstChunk(compress,FALSE);
}
printf("The base64 encoded compressed text:\n");
printf("%s\n",CkBinData_getEncoded(bdCompressed,"base64"));
// Decompress in one call:
originalText = CkCompression_decompressStringENC(compress,CkBinData_getEncoded(bdCompressed,"base64"));
printf("%s\n",originalText);
CkStringBuilder_Dispose(sbCompressedBase64);
CkCompression_Dispose(compress);
CkStringBuilder_Dispose(sbIndex);
CkBinData_Dispose(bdCompressed);
CkStringBuilder_Dispose(sbUncompressedChunk);
}