Delphi DLL
Delphi DLL
Get FTP Directory Listing as XML
See more FTP Examples
Demonstrates how to call GetXmlDirListing and parse the results.Chilkat Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Ftp2, Xml;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
ftp: HCkFtp2;
xmlListing: PWideChar;
xml: HCkXml;
i: Integer;
numEntries: Integer;
xEntry: HCkXml;
sz: Integer;
xLastMod: HCkXml;
month: Integer;
year: Integer;
day: Integer;
begin
success := False;
// This example assumes Chilkat Ftp2 to have been previously unlocked.
// See Unlock Ftp2 for sample code.
ftp := CkFtp2_Create();
CkFtp2_putHostname(ftp,'www.my-ftp-server.com');
CkFtp2_putUsername(ftp,'mFtpLogin');
CkFtp2_putPassword(ftp,'myFtpPassword');
// Connect to the FTP server.
success := CkFtp2_ConnectOnly(ftp);
if (success <> True) then
begin
Memo1.Lines.Add(CkFtp2__lastErrorText(ftp));
Exit;
end;
// Authenticate with the FTP server.
success := CkFtp2_LoginAfterConnectOnly(ftp);
if (success <> True) then
begin
Memo1.Lines.Add(CkFtp2__lastErrorText(ftp));
Exit;
end;
// Retrieve (in XML format) the HOME directory of this FTP account.
xmlListing := CkFtp2__getXmlDirListing(ftp,'*.*');
if (CkFtp2_getLastMethodSuccess(ftp) <> True) then
begin
Memo1.Lines.Add(CkFtp2__lastErrorText(ftp));
Exit;
end;
// Now load the XML and parse it..
xml := CkXml_Create();
CkXml_LoadXml(xml,xmlListing);
Memo1.Lines.Add(CkXml__getXml(xml));
// Iterate over the XML...
i := 0;
numEntries := CkXml_getNumChildren(xml);
while i < numEntries do
begin
xEntry := CkXml_GetChild(xml,i);
if (CkXml_TagEquals(xEntry,'dir') = True) then
begin
Memo1.Lines.Add('Directory: ' + CkXml__content(xEntry));
end
else
begin
sz := CkXml_GetChildIntValue(xEntry,'size');
Memo1.Lines.Add('File: ' + CkXml__getChildContent(xEntry,'name') + ', size: ' + IntToStr(sz));
xLastMod := CkXml_FindChild(xEntry,'lastModTime');
if (CkXml_getLastMethodSuccess(xEntry) = True) then
begin
month := CkXml_GetAttrValueInt(xLastMod,'m');
year := CkXml_GetAttrValueInt(xLastMod,'y');
day := CkXml_GetAttrValueInt(xLastMod,'d');
Memo1.Lines.Add(' YYYY-MM-DD: ' + IntToStr(year) + '-' + IntToStr(month) + '-' + IntToStr(day));
CkXml_Dispose(xLastMod);
end;
end;
CkXml_Dispose(xEntry);
i := i + 1;
end;
CkFtp2_Disconnect(ftp);
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>
//
//
CkFtp2_Dispose(ftp);
CkXml_Dispose(xml);
end;