Sample code for 30+ languages & platforms
Delphi ActiveX

Get FTP Directory Listing as XML

See more FTP Examples

Demonstrates how to call GetXmlDirListing and parse the results.

Chilkat Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
ftp: TChilkatFtp2;
xmlListing: WideString;
xml: TChilkatXml;
i: Integer;
numEntries: Integer;
xEntry: IChilkatXml;
sz: Integer;
xLastMod: IChilkatXml;
month: Integer;
year: Integer;
day: Integer;

begin
success := 0;

// This example assumes Chilkat Ftp2 to have been previously unlocked.
// See Unlock Ftp2 for sample code.

ftp := TChilkatFtp2.Create(Self);

ftp.Hostname := 'www.my-ftp-server.com';
ftp.Username := 'mFtpLogin';
ftp.Password := 'myFtpPassword';

// Connect to the FTP server.
success := ftp.ConnectOnly();
if (success <> 1) then
  begin
    Memo1.Lines.Add(ftp.LastErrorText);
    Exit;
  end;

// Authenticate with the FTP server.
success := ftp.LoginAfterConnectOnly();
if (success <> 1) then
  begin
    Memo1.Lines.Add(ftp.LastErrorText);
    Exit;
  end;

// Retrieve (in XML format) the HOME directory of this FTP account.
xmlListing := ftp.GetXmlDirListing('*.*');
if (ftp.LastMethodSuccess <> 1) then
  begin
    Memo1.Lines.Add(ftp.LastErrorText);
    Exit;
  end;

// Now load the XML and parse it..
xml := TChilkatXml.Create(Self);
xml.LoadXml(xmlListing);
Memo1.Lines.Add(xml.GetXml());

// Iterate over the XML...
i := 0;
numEntries := xml.NumChildren;
while i < numEntries do
  begin
    xEntry := xml.GetChild(i);
    if (xEntry.TagEquals('dir') = 1) then
      begin
        Memo1.Lines.Add('Directory: ' + xEntry.Content);
      end
    else
      begin
        sz := xEntry.GetChildIntValue('size');
        Memo1.Lines.Add('File: ' + xEntry.GetChildContent('name') + ', size: ' + IntToStr(sz));
        xLastMod := xEntry.FindChild('lastModTime');
        if (xEntry.LastMethodSuccess = 1) then
          begin
            month := xLastMod.GetAttrValueInt('m');
            year := xLastMod.GetAttrValueInt('y');
            day := xLastMod.GetAttrValueInt('d');
            Memo1.Lines.Add('    YYYY-MM-DD: ' + IntToStr(year) + '-' + IntToStr(month) + '-' + IntToStr(day));

          end;
      end;

    i := i + 1;
  end;

ftp.Disconnect();

Memo1.Lines.Add('Success.');

// Sample XML directory listing:
// <?xml version="1.0" encoding="utf-8" ?>
// <remoteDir>
//     <dir>Desktop</dir>
//     <dir>Documents</dir>
//     <dir>Downloads</dir>
//     <dir>Music</dir>
//     <dir>Pictures</dir>
//     <dir>Public</dir>
//     <dir>Templates</dir>
//     <dir>Videos</dir>
//     <file>
//         <name>c.py</name>
//         <size>1244</size>
//         <lastModTime full="20151009-000000" y="2015" d="9" m="10" hh="0" mm="0" ss="0" />
//     </file>
//     <file>
//         <name>cacerts_linux</name>
//         <size>177207</size>
//         <lastModTime full="20140915-000000" y="2014" d="15" m="9" hh="0" mm="0" ss="0" />
//     </file>
//     <file>
//         <name>empty.txt</name>
//         <size>0</size>
//         <lastModTime full="20150917-000000" y="2015" d="17" m="9" hh="0" mm="0" ss="0" />
//     </file>
//     <file>
//         <name>hamlet.xml</name>
//         <size>279658</size>
//         <lastModTime full="20160917-084100" y="2016" d="17" m="9" hh="8" mm="41" ss="0" />
//     </file>
// </remoteDir>
// 
// 
end;