Sample code for 30+ languages & platforms
Unicode C

Transition from BeginCompressStringENC to FirstChunk/LastChunk

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

Chilkat Unicode C Downloads

Unicode C
#include <C_CkStringBuilderW.h>
#include <C_CkCompressionW.h>
#include <C_CkBinDataW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkStringBuilderW sbCompressedBase64;
    HCkCompressionW compress;
    HCkStringBuilderW sbIndex;
    int i;
    const wchar_t *originalText;
    HCkBinDataW bdCompressed;
    HCkStringBuilderW sbUncompressedChunk;

    success = FALSE;

    //  This example assumes the Chilkat API to have been previously unlocked.
    //  See Global Unlock Sample for sample code.

    sbCompressedBase64 = CkStringBuilderW_Create();

    compress = CkCompressionW_Create();
    CkCompressionW_putAlgorithm(compress,L"deflate");
    CkCompressionW_putCharset(compress,L"utf-8");
    CkCompressionW_putEncodingMode(compress,L"base64");

    sbIndex = CkStringBuilderW_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.
        CkStringBuilderW_Clear(sbIndex);
        CkStringBuilderW_AppendInt(sbIndex,i);
        if (i == 0) {
            CkStringBuilderW_Append(sbCompressedBase64,CkCompressionW_beginCompressStringENC(compress,CkStringBuilderW_getAsString(sbIndex)));
        }
        else {
            CkStringBuilderW_Append(sbCompressedBase64,CkCompressionW_moreCompressStringENC(compress,CkStringBuilderW_getAsString(sbIndex)));
        }

        CkStringBuilderW_Append(sbCompressedBase64,CkCompressionW_moreCompressStringENC(compress,L": This is a line of data to be compressed...\r\n"));
    }

    //  Flush any remaining output.
    CkStringBuilderW_Append(sbCompressedBase64,CkCompressionW_endCompressStringENC(compress));

    wprintf(L"The base64 encoded compressed text:\n");
    wprintf(L"%s\n",CkStringBuilderW_getAsString(sbCompressedBase64));

    //  Decompress in one call:
    originalText = CkCompressionW_decompressStringENC(compress,CkStringBuilderW_getAsString(sbCompressedBase64));
    wprintf(L"%s\n",originalText);

    //  ----------------------------------------------------------------------------------
    //  This is new way of compressing in chunks using FirstChunk and LastChunk properties
    //  ----------------------------------------------------------------------------------

    CkStringBuilderW_Clear(sbCompressedBase64);

    CkCompressionW_putFirstChunk(compress,TRUE);
    CkCompressionW_putLastChunk(compress,FALSE);

    bdCompressed = CkBinDataW_Create();
    sbUncompressedChunk = CkStringBuilderW_Create();

    for (i = 0; i <= 24; i++) {
        if (i == 24) {
            CkCompressionW_putLastChunk(compress,TRUE);
        }

        CkStringBuilderW_Clear(sbUncompressedChunk);
        CkStringBuilderW_AppendInt(sbUncompressedChunk,i);
        CkStringBuilderW_Append(sbUncompressedChunk,L": This is a line of data to be compressed...\r\n");

        CkCompressionW_CompressSb(compress,sbUncompressedChunk,bdCompressed);

        CkCompressionW_putFirstChunk(compress,FALSE);
    }

    wprintf(L"The base64 encoded compressed text:\n");
    wprintf(L"%s\n",CkBinDataW_getEncoded(bdCompressed,L"base64"));

    //  Decompress in one call:
    originalText = CkCompressionW_decompressStringENC(compress,CkBinDataW_getEncoded(bdCompressed,L"base64"));
    wprintf(L"%s\n",originalText);


    CkStringBuilderW_Dispose(sbCompressedBase64);
    CkCompressionW_Dispose(compress);
    CkStringBuilderW_Dispose(sbIndex);
    CkBinDataW_Dispose(bdCompressed);
    CkStringBuilderW_Dispose(sbUncompressedChunk);

    }