PureBasic
PureBasic
Iterate Through ZIP Entries Using EntryAt and ZipEntry.GetNext
See more Zip Examples
This example demonstrates how to iterate through all entries in a ZIP archive using:
-
Zip.EntryAtto obtain the first entry -
ZipEntry.GetNextto advance through the remaining entries
The example prints each ZIP entry's stored filename and whether the entry is a file or directory.
This approach is useful when sequentially processing ZIP entries without repeatedly calling EntryAt by index.
Suppose the ZIP archive contains:
docs/
docs/readme.txt
images/logo.png
hello.txt The example iterates through each entry in the order stored within the ZIP archive.
Chilkat PureBasic Downloads
IncludeFile "CkZip.pb"
IncludeFile "CkZipEntry.pb"
Procedure ChilkatExample()
success.i = 0
zip.i = CkZip::ckCreate()
If zip.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Open an existing ZIP archive.
success = CkZip::ckOpenZip(zip,"c:/temp/example.zip")
If success = 0
Debug CkZip::ckLastErrorText(zip)
CkZip::ckDispose(zip)
ProcedureReturn
EndIf
; A ZIP archive may contain zero entries.
If CkZip::ckNumEntries(zip) = 0
Debug "The ZIP archive is empty."
CkZip::ckCloseZip(zip)
CkZip::ckDispose(zip)
ProcedureReturn
EndIf
; ------------------------------------------------------------
; Get the first ZIP entry.
;
; EntryAt(0,entry) initializes the ZipEntry object so that
; it represents the first entry in the ZIP archive.
;
entry.i = CkZipEntry::ckCreate()
If entry.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkZip::ckEntryAt(zip,0,entry)
If success = 0
Debug CkZip::ckLastErrorText(zip)
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
ProcedureReturn
EndIf
; ------------------------------------------------------------
; Iterate through all ZIP entries.
;
; GetNext updates the same ZipEntry object so that it
; represents the next entry in the ZIP archive.
;
While (success = 1)
If CkZipEntry::ckIsDirectory(entry) = 1
Debug "[Directory] " + CkZipEntry::ckFileName(entry)
Else
Debug "[File] " + CkZipEntry::ckFileName(entry)
EndIf
; Advance to the next entry.
success = CkZipEntry::ckGetNext(entry)
Wend
CkZip::ckCloseZip(zip)
Debug "Done."
CkZip::ckDispose(zip)
CkZipEntry::ckDispose(entry)
ProcedureReturn
EndProcedure