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

FTP Sync Upload Tree w/ Must-Match Filename Constraints

See more FTP Examples

Demonstrates how synchronize a directory tree in the upload direction, but only upload files matching a set of wildcard filenames.

Note: This example requires Chilkat v9.5.0.76 or greater.

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.StringTable;

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

procedure RunDemo;
var
  success: Boolean;
  ftp: TFtp2;
  mode: Integer;
  st: TStringTable;
  numFiles: Integer;
  i: Integer;
  remoteFilename: string;

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.something.com';
  ftp.Username := 'my_login';
  ftp.Password := 'my_password';

  //  Connect and login to the FTP server.
  success := ftp.Connect();
  if (success <> True) then
    begin
      WriteLn(ftp.LastErrorText);
      Exit;
    end;

  //  Set the current remote directory to the root of
  //  the tree to receive the uploaded files.
  success := ftp.ChangeRemoteDir('/subDir1');
  if (success <> True) then
    begin
      WriteLn(ftp.LastErrorText);
      Exit;
    end;

  //  Possible synchronization modes are:
  //  mode=0: Upload all files
  //  mode=1: Upload all files that do not exist on the FTP server.
  //  mode=2: Upload newer or non-existant files.
  //  mode=3: Upload only newer files. If a file does not already exist on the FTP server, it is not uploaded.
  //  mode=4: transfer missing files or files with size differences.
  //  mode=5: same as mode 4, but also newer files. 

  //  This example will upload all files, but only those files having filenames
  //  that match *.gif and *.eml

  //  Imagine our local directory tree has these files and directories:

  //  	accentedLatin1.txt
  //  	accentedUtf8.txt
  //  	alice.key
  //  	anter_cert.pem
  //  	chiliPepper.gif
  //  	helloWorld.pdf
  //  	abc/chiliPepper.gif
  //  	abc/ghk/
  //  	data/chiliPepper.gif
  //  	data/xyz/dkimHtmlBody.txt
  //  	data/xyz/dkimVerifyTest.eml
  //  	data/xyz/emailForCreateDsn.eml
  //  	text/frenchUtf8.txt
  //  	text/helloWorld.txt
  //  	text/PolishEmailBody.txt
  //  	text/something/

  ftp.SyncMustMatch := '*.eml; *.gif';
  mode := 0;
  success := ftp.SyncRemoteTree('c:/temp/subDir1',mode);
  if (success <> True) then
    begin
      WriteLn(ftp.LastErrorText);
      Exit;
    end;

  success := ftp.Disconnect();

  //  Show the files downloaded.
  st := TStringTable.Create;
  ftp.GetSyncedFiles(st);

  numFiles := st.Count;
  i := 0;

  while i < numFiles do
    begin
      WriteLn(st.StringAt(i));
      i := i + 1;
    end;

  //  Output showing the files uploaded:

  //  chiliPepper.gif
  //  abc/chiliPepper.gif
  //  data/chiliPepper.gif
  //  data/xyz/dkimVerifyTest.eml
  //  data/xyz/emailForCreateDsn.eml


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