Sample code for 30+ languages & platforms
Visual FoxPro

Get FTP Directory Listing as XML

See more FTP Examples

Demonstrates how to call GetXmlDirListing and parse the results.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loFtp
LOCAL lcXmlListing
LOCAL loXml
LOCAL i
LOCAL lnNumEntries
LOCAL loXEntry
LOCAL lnSz
LOCAL loXLastMod
LOCAL lnMonth
LOCAL lnYear
LOCAL lnDay

lnSuccess = 0

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

loFtp = CreateObject('Chilkat.Ftp2')

loFtp.Hostname = "www.my-ftp-server.com"
loFtp.Username = "mFtpLogin"
loFtp.Password = "myFtpPassword"

* Connect to the FTP server.
lnSuccess = loFtp.ConnectOnly()
IF (lnSuccess <> 1) THEN
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

* Authenticate with the FTP server.
lnSuccess = loFtp.LoginAfterConnectOnly()
IF (lnSuccess <> 1) THEN
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

* Retrieve (in XML format) the HOME directory of this FTP account.
lcXmlListing = loFtp.GetXmlDirListing("*.*")
IF (loFtp.LastMethodSuccess <> 1) THEN
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

* Now load the XML and parse it..
loXml = CreateObject('Chilkat.Xml')
loXml.LoadXml(lcXmlListing)
? loXml.GetXml()

* Iterate over the XML...
i = 0
lnNumEntries = loXml.NumChildren
DO WHILE i < lnNumEntries
    loXEntry = loXml.GetChild(i)
    IF (loXEntry.TagEquals("dir") = 1) THEN
        ? "Directory: " + loXEntry.Content
    ELSE
        lnSz = loXEntry.GetChildIntValue("size")
        ? "File: " + loXEntry.GetChildContent("name") + ", size: " + STR(lnSz)
        loXLastMod = loXEntry.FindChild("lastModTime")
        IF (loXEntry.LastMethodSuccess = 1) THEN
            lnMonth = loXLastMod.GetAttrValueInt("m")
            lnYear = loXLastMod.GetAttrValueInt("y")
            lnDay = loXLastMod.GetAttrValueInt("d")
            ? "    YYYY-MM-DD: " + STR(lnYear) + "-" + STR(lnMonth) + "-" + STR(lnDay)
            RELEASE loXLastMod
        ENDIF

    ENDIF

    RELEASE loXEntry
    i = i + 1
ENDDO

loFtp.Disconnect()

? "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>
* 
* 

RELEASE loFtp
RELEASE loXml