Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Extract a .tar.gz Archive to a Directory

See more Gzip Examples

This example demonstrates how to use the UnTarGz method to extract a .tar.gz archive to a specified directory.

The method performs both the Gzip decompression and TAR extraction in a single step. It operates in streaming mode, meaning it does not create temporary files and uses a constant, minimal amount of memory regardless of archive size.

The bNoAbsolute parameter is set to _TRUE_ in this example to prevent extraction of files with absolute paths. This is a safety measure that helps avoid overwriting files in unintended locations (such as system directories).

This method is ideal for efficiently extracting large .tar.gz archives while maintaining security and low memory usage.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
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.Gzip;

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

procedure RunDemo;
var
  success: Boolean;
  gzip: TGzip;
  tgzPath: string;
  destDir: string;
  noAbsolute: Boolean;

begin
  success := False;

  //  This example demonstrates how to extract a .tar.gz archive to a directory.

  gzip := TGzip.Create;

  //  The .tar.gz file to be extracted:
  tgzPath := 'c:/temp/archive.tar.gz';

  //  The destination directory:
  destDir := 'c:/temp/outputDir';

  //  Set to True to prevent extraction of files with absolute paths:
  noAbsolute := True;

  //  Extract the archive:
  success := gzip.UnTarGz(tgzPath,destDir,noAbsolute);
  if (success = False) then
    begin
      WriteLn(gzip.LastErrorText);
      Exit;
    end;

  WriteLn('Archive successfully extracted to: ' + destDir);


  gzip.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.