Sample code for 30+ languages & platforms
Unicode C

Unzip Some Files by Iterating over Entries

See more Zip Examples

Demonstrates how to unzip specific files by iterating over entries in a .zip.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkZipW.h>
#include <C_CkStringBuilderW.h>
#include <C_CkZipEntryW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkZipW zip;
    HCkStringBuilderW sbFilename;
    HCkZipEntryW entry;
    int numEntries;
    int i;
    const wchar_t *entryFilePath;

    success = FALSE;

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

    zip = CkZipW_Create();

    // Open a .zip containing:
    // 
    // a1.xml
    // b1.xml
    // c1.xml
    // dir1/a2.xml
    // dir1/c2.xml
    // dir2/dir3/c3.xml

    // We wish to unzip only a1.xml, b1.xml, and c1.xml
    success = CkZipW_OpenZip(zip,L"qa_data/zips/xml_files.zip");
    if (success == FALSE) {
        wprintf(L"%s\n",CkZipW_lastErrorText(zip));
        CkZipW_Dispose(zip);
        return;
    }

    sbFilename = CkStringBuilderW_Create();

    entry = CkZipEntryW_Create();
    numEntries = CkZipW_getNumEntries(zip);
    i = 0;
    while (i < numEntries) {
        CkZipW_EntryAt(zip,i,entry);

        entryFilePath = CkZipEntryW_fileName(entry);
        wprintf(L"%s\n",entryFilePath);

        if (CkZipEntryW_getIsDirectory(entry) == FALSE) {
            CkStringBuilderW_SetString(sbFilename,entryFilePath);
            if (CkStringBuilderW_Contains(sbFilename,L"/",FALSE) == FALSE) {
                // Does not contain "/"
                // Unzip to the qa_output directory.
                success = CkZipEntryW_Extract(entry,L"qa_output");
                if (success == FALSE) {
                    wprintf(L"Failed to unzip %s\n",entryFilePath);
                }
                else {
                    wprintf(L"Unzipped %s\n",entryFilePath);
                }

            }

        }

        i = i + 1;
    }



    CkZipW_Dispose(zip);
    CkStringBuilderW_Dispose(sbFilename);
    CkZipEntryW_Dispose(entry);

    }