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

FTP Iterate over Files in Directory Matching ListPattern

See more RSA Examples

Uses the ListPattern property to iterate over the files in a directory matching the pattern.

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.Ftp2,
  Chilkat.StringBuilder;

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

procedure RunDemo;
var
  success: Boolean;
  ftp: TFtp2;
  n: Integer;
  i: Integer;
  filename: string;
  sbLocalPath: TStringBuilder;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  ftp := TFtp2.Create;

  ftp.Hostname := 'ftp.example.com';
  ftp.Username := 'my_login';
  ftp.Password := 'my_password';
  ftp.Port := 21;
  ftp.AuthTls := True;

  success := ftp.Connect();
  if (success <> True) then
    begin
      WriteLn(ftp.LastErrorText);
      Exit;
    end;

  //  Change to the "images" sub-directory located under our FTP account's home directory.
  success := ftp.ChangeRemoteDir('images');
  if (success <> True) then
    begin
      WriteLn(ftp.LastErrorText);
      Exit;
    end;

  ftp.ListPattern := '*.png';

  //  Fetch the current remote directory contents by calling GetDirCount
  n := ftp.GetDirCount();
  if (n < 0) then
    begin
      WriteLn(ftp.LastErrorText);
      Exit;
    end;

  i := 0;

  sbLocalPath := TStringBuilder.Create;

  while i < n do
    begin
      filename := ftp.GetFilename(i);
      WriteLn(filename);

      //  Download this file.
      sbLocalPath.SetString('qa_output/');
      sbLocalPath.Append(filename);
      success := ftp.GetFile(filename,sbLocalPath.GetAsString());
      if (success <> True) then
        begin
          WriteLn(ftp.LastErrorText);
          Exit;
        end;

      i := i + 1;
    end;



  ftp.Free;
  sbLocalPath.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.