Sample code for 30+ languages & platforms
Delphi DLL

Add a Common Root Directory to ZIP Entries Using PathPrefix

See more Zip Examples

This example demonstrates how to use the PathPrefix property to prepend a common directory path to all entries added to a ZIP archive.

The PathPrefix value is prepended to the stored ZIP paths for subsequently added entries.

This is useful when:

  • Creating ZIP archives that extract beneath a single root directory
  • Packaging applications or projects into a named top-level folder
  • Avoiding extraction directly into the current directory
  • Organizing ZIP contents beneath a common parent directory

Suppose the local filesystem contains:

c:/MyProject/src/main.cpp
c:/MyProject/src/util.cpp
c:/MyProject/docs/readme.txt

And suppose the following code is executed:

zip.PathPrefix = "MyProject/";

Then the ZIP archive will contain:

MyProject/src/main.cpp
MyProject/src/util.cpp
MyProject/docs/readme.txt

Without a PathPrefix, the ZIP archive would instead contain:

src/main.cpp
src/util.cpp
docs/readme.txt

The PathPrefix is applied only to entries added after the property is set.

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, Zip;

...

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

begin
success := False;

zip := CkZip_Create();

// Create a new ZIP archive.
success := CkZip_NewZip(zip,'MyProject.zip');
if (success = False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

// Prepend "MyProject/" to all subsequently added ZIP entries.
// 
// This causes all files to extract beneath a top-level
// directory named "MyProject".
CkZip_putPathPrefix(zip,'MyProject/');

// Recursively add project files.
// 
// Because saveExtraPath = False, the stored ZIP paths
// will normally begin with:
// 
//     src/
//     docs/
// 
// But because PathPrefix = "MyProject/",
// the final ZIP paths become:
// 
//     MyProject/src/
//     MyProject/docs/
// 
recurse := True;
success := CkZip_AppendFiles(zip,'c:/MyProject/*',recurse);

if (success = False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

// Write the ZIP archive and close it.
success := CkZip_WriteZipAndClose(zip);
if (success = False) then
  begin
    Memo1.Lines.Add(CkZip__lastErrorText(zip));
    Exit;
  end;

Memo1.Lines.Add('ZIP archive created successfully.');

CkZip_Dispose(zip);

end;