PureBasic
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
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