Delphi DLL
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.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 Delphi DLL Downloads
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;