Sample code for 30+ languages & platforms
Lazarus Pascal Requires Chilkat v11.0.0+

Exclude Multiple Directories When Adding Files to a ZIP

See more Zip Examples

This example demonstrates how to use the ExcludeDir method to exclude specific directory names when recursively adding files to a ZIP archive.

The ExcludeDir method excludes directories by name. Any directory matching an excluded name is skipped entirely, including all files and subdirectories beneath it.

This is useful for excluding directories such as:

  • .git
  • node_modules
  • bin
  • obj
  • Temporary or cache directories

Call ExcludeDir once for each directory name to exclude.

Suppose the local filesystem contains:

c:/project/src/main.cpp
c:/project/src/util.cpp
c:/project/bin/app.exe
c:/project/obj/main.obj
c:/project/.git/config
c:/project/node_modules/library/index.js

After excluding bin, obj, .git, and node_modules, only the files beneath src are added to the ZIP archive.

The resulting ZIP archive contains:

project/src/main.cpp
project/src/util.cpp

Chilkat Lazarus Pascal Downloads

Lazarus Pascal
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Zip;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  zip: TZip;
  recurse: Boolean;
  saveExtraPath: Boolean;
  archiveOnly: Boolean;
  includeHidden: Boolean;
  includeSystem: Boolean;

begin
  success := False;

  zip := TZip.Create;

  success := zip.NewZip('project.zip');
  if (success = False) then
    begin
      WriteLn(zip.LastErrorText);
      Exit;
    end;

  //  Exclude several directory names.
  //  
  //  Any directory matching one of these names will be skipped
  //  during recursive file appending.
  zip.ExcludeDir('bin');
  zip.ExcludeDir('obj');
  zip.ExcludeDir('.git');
  zip.ExcludeDir('node_modules');

  //  Recursively append all files beneath c:/project.
  //  
  //  Because saveExtraPath = True, the ZIP paths will
  //  include "project/" as the leading directory.
  recurse := True;
  saveExtraPath := True;
  archiveOnly := False;
  includeHidden := True;
  includeSystem := False;

  success := zip.AppendFilesEx('c:/project',recurse,saveExtraPath,archiveOnly,includeHidden,includeSystem);
  if (success = False) then
    begin
      WriteLn(zip.LastErrorText);
      Exit;
    end;

  //  Write the ZIP archive.
  success := zip.WriteZipAndClose();
  if (success = False) then
    begin
      WriteLn(zip.LastErrorText);
      Exit;
    end;

  WriteLn('ZIP archive created successfully.');


  zip.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.