Sample code for 30+ languages & platforms
PureBasic

Iterate Over ZIP Entries Using EntryAt

This example demonstrates how to use the EntryAt method to iterate over all entries contained within a ZIP archive.

The EntryAt method retrieves a ZipEntry object for a given zero-based index.

This is useful for:

  • Enumerating all entries in a ZIP archive
  • Inspecting filenames, sizes, and timestamps
  • Searching or filtering ZIP contents

Suppose the ZIP archive contains:

docs/readme.txt
images/logo.png
data/config.json

The example loops through all ZIP entries and prints information about each entry.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkZip.pb"
IncludeFile "CkZipEntry.pb"

Procedure ChilkatExample()

    success.i = 0

    success = 0

    ; Open an existing ZIP archive.
    zip.i = CkZip::ckCreate()
    If zip.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkZip::ckOpenZip(zip,"example.zip")
    If success = 0
        Debug CkZip::ckLastErrorText(zip)
        CkZip::ckDispose(zip)
        ProcedureReturn
    EndIf

    ; Get the total number of entries in the ZIP archive.
    numEntries.i = CkZip::ckNumEntries(zip)

    Debug "Number of ZIP entries = " + Str(numEntries)

    ; Create a ZipEntry object that will be reused
    ; for each entry retrieved by EntryAt.
    entry.i = CkZipEntry::ckCreate()
    If entry.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Iterate over all ZIP entries.
    i.i = 0
    While i < numEntries

        ; Retrieve the entry at index i.
        success = CkZip::ckEntryAt(zip,i,entry)
        If success = 0
            Debug CkZip::ckLastErrorText(zip)
            CkZip::ckDispose(zip)
            CkZipEntry::ckDispose(entry)
            ProcedureReturn
        EndIf

        Debug "Entry " + Str(i)
        Debug "  FileName: " + CkZipEntry::ckFileName(entry)
        Debug "  Uncompressed Length: " + Str(CkZipEntry::ckUncompressedLength(entry))
        Debug "  Compressed Length: " + Str(CkZipEntry::ckCompressedLength(entry))
        Debug ""

        i = i + 1
    Wend

    ; Sample output:
    ; 
    ; Entry 0
    ;   FileName: docs/readme.txt
    ;   Uncompressed Length: 1204
    ;   Compressed Length: 512
    ; 
    ; Entry 1
    ;   FileName: images/logo.png
    ;   Uncompressed Length: 84211
    ;   Compressed Length: 84102
    ; 

    CkZip::ckCloseZip(zip)

    Debug "Done."


    CkZip::ckDispose(zip)
    CkZipEntry::ckDispose(entry)


    ProcedureReturn
EndProcedure