Sample code for 30+ languages & platforms
C

Transition from BeginCompressStringENC to FirstChunk/LastChunk

Provides instructions for replacing deprecated BeginCompressStringENC method calls with using FirstChunk/LastChunk properties.

Chilkat C Downloads

C
#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);

    }