Sample code for 30+ languages & platforms
Delphi DLL

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.EntryAt to obtain the first entry
  • ZipEntry.GetNext to 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 Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ZipEntry, Zip;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
zip: HCkZip;
entry: HCkZipEntry;

begin
success := False;

zip := CkZip_Create();

// Open an existing ZIP archive.
success := CkZip_OpenZip(zip,'c:/temp/example.zip');
if (success = False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

// A ZIP archive may contain zero entries.
if (CkZip_getNumEntries(zip) = 0) then
  begin

    Memo1.Lines.Add('The ZIP archive is empty.');

    CkZip_CloseZip(zip);
    Exit;
  end;

// ------------------------------------------------------------
// Get the first ZIP entry.
// 
// EntryAt(0,entry) initializes the ZipEntry object so that
// it represents the first entry in the ZIP archive.
// 
entry := CkZipEntry_Create();

success := CkZip_EntryAt(zip,0,entry);
if (success = False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

// ------------------------------------------------------------
// Iterate through all ZIP entries.
// 
// GetNext updates the same ZipEntry object so that it
// represents the next entry in the ZIP archive.
// 
while (success = True) do
  begin

    if (CkZipEntry_getIsDirectory(entry) = True) then
      begin

        Memo1.Lines.Add('[Directory] ' + CkZipEntry__fileName(entry));

      end
    else
      begin

        Memo1.Lines.Add('[File] ' + CkZipEntry__fileName(entry));
      end;

    // Advance to the next entry.
    success := CkZipEntry_GetNext(entry);
  end;

CkZip_CloseZip(zip);

Memo1.Lines.Add('Done.');

CkZip_Dispose(zip);
CkZipEntry_Dispose(entry);

end;