Sample code for 30+ languages & platforms
Unicode C

File Read Blocks

Demonstrates how to read a file in fixed-size blocks (except for the very last block).

Chilkat Unicode C Downloads

Unicode C
#include <C_CkByteData.h>
#include <C_CkFileAccessW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkByteData dataBlock;
    HCkFileAccessW facSrc;
    HCkFileAccessW facDest;
    const wchar_t *srcPath;
    const wchar_t *destPath;
    int numBlocks;
    int i;
    BOOL bEqual;

    success = FALSE;

    //  Demonstrates how to read a file in blocks,
    //  which can be useful when uploading to cloud storage
    //  services such as Azure, S3, Google, etc.

    //  For this example, we're simply writing the blocks
    //  to an output file, and then checking to see if the
    //  resulting file contents equals the original file contents.

    dataBlock = CkByteData_Create();

    facSrc = CkFileAccessW_Create();
    facDest = CkFileAccessW_Create();

    srcPath = L"qa_data/xml/hamlet.xml";
    destPath = L"qa_output/hamletOut.xml";

    success = CkFileAccessW_OpenForRead(facSrc,srcPath);
    success = CkFileAccessW_OpenForWrite(facDest,destPath);
    //  Assuming success for the example..

    //  How many 1024-byte blocks?  (Including 1 for the last partial block)
    numBlocks = CkFileAccessW_GetNumBlocks(facSrc,1024);

    i = 0;
    while ((i < numBlocks)) {
        success = CkFileAccessW_ReadBlock(facSrc,i,1024,dataBlock);
        if (CkFileAccessW_getLastMethodSuccess(facSrc) != TRUE) {
            wprintf(L"%s\n",CkFileAccessW_lastErrorText(facSrc));
            CkByteData_Dispose(dataBlock);
            CkFileAccessW_Dispose(facSrc);
            CkFileAccessW_Dispose(facDest);
            return;
        }

        success = CkFileAccessW_FileWrite(facDest,dataBlock);
        if (success != TRUE) {
            wprintf(L"%s\n",CkFileAccessW_lastErrorText(facDest));
            CkByteData_Dispose(dataBlock);
            CkFileAccessW_Dispose(facSrc);
            CkFileAccessW_Dispose(facDest);
            return;
        }

        i = i + 1;
    }

    CkFileAccessW_FileClose(facSrc);
    CkFileAccessW_FileClose(facDest);

    bEqual = CkFileAccessW_FileContentsEqual(facSrc,srcPath,destPath);
    if (bEqual != TRUE) {
        wprintf(L"Something went wrong!\n");
        CkByteData_Dispose(dataBlock);
        CkFileAccessW_Dispose(facSrc);
        CkFileAccessW_Dispose(facDest);
        return;
    }

    wprintf(L"File successfully copied by blocks.\n");


    CkByteData_Dispose(dataBlock);
    CkFileAccessW_Dispose(facSrc);
    CkFileAccessW_Dispose(facDest);

    }