Sample code for 30+ languages & platforms
Delphi DLL

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 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;
numEntries: Integer;
entry: HCkZipEntry;
i: Integer;

begin
success := False;

success := False;

// Open an existing ZIP archive.
zip := CkZip_Create();

success := CkZip_OpenZip(zip,'example.zip');
if (success = False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

// Get the total number of entries in the ZIP archive.
numEntries := CkZip_getNumEntries(zip);

Memo1.Lines.Add('Number of ZIP entries = ' + IntToStr(numEntries));

// Create a ZipEntry object that will be reused
// for each entry retrieved by EntryAt.
entry := CkZipEntry_Create();

// Iterate over all ZIP entries.
i := 0;
while i < numEntries do
  begin

    // Retrieve the entry at index i.
    success := CkZip_EntryAt(zip,i,entry);
    if (success = False) then
      begin
        Memo1.Lines.Add(CkZip__lastErrorText(zip));
        Exit;
      end;

    Memo1.Lines.Add('Entry ' + IntToStr(i));
    Memo1.Lines.Add('  FileName: ' + CkZipEntry__fileName(entry));
    Memo1.Lines.Add('  Uncompressed Length: ' + IntToStr(CkZipEntry_getUncompressedLength(entry)));
    Memo1.Lines.Add('  Compressed Length: ' + IntToStr(CkZipEntry_getCompressedLength(entry)));
    Memo1.Lines.Add('');

    i := i + 1;
  end;

// 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_CloseZip(zip);

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

CkZip_Dispose(zip);
CkZipEntry_Dispose(entry);

end;