Sample code for 30+ languages & platforms
PureBasic

Get FTP Directory Listing as XML

See more FTP Examples

Demonstrates how to call GetXmlDirListing and parse the results.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkFtp2.pb"
IncludeFile "CkXml.pb"

Procedure ChilkatExample()

    success.i = 0

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

    ftp.i = CkFtp2::ckCreate()
    If ftp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkFtp2::setCkHostname(ftp, "www.my-ftp-server.com")
    CkFtp2::setCkUsername(ftp, "mFtpLogin")
    CkFtp2::setCkPassword(ftp, "myFtpPassword")

    ; Connect to the FTP server.
    success = CkFtp2::ckConnectOnly(ftp)
    If success <> 1
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        ProcedureReturn
    EndIf

    ; Authenticate with the FTP server.
    success = CkFtp2::ckLoginAfterConnectOnly(ftp)
    If success <> 1
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        ProcedureReturn
    EndIf

    ; Retrieve (in XML format) the HOME directory of this FTP account.
    xmlListing.s = CkFtp2::ckGetXmlDirListing(ftp,"*.*")
    If CkFtp2::ckLastMethodSuccess(ftp) <> 1
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        ProcedureReturn
    EndIf

    ; Now load the XML and parse it..
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::ckLoadXml(xml,xmlListing)
    Debug CkXml::ckGetXml(xml)

    ; Iterate over the XML...
    i.i = 0
    numEntries.i = CkXml::ckNumChildren(xml)
    While i < numEntries
        xEntry.i = CkXml::ckGetChild(xml,i)
        If CkXml::ckTagEquals(xEntry,"dir") = 1
            Debug "Directory: " + CkXml::ckContent(xEntry)
        Else
            sz.i = CkXml::ckGetChildIntValue(xEntry,"size")
            Debug "File: " + CkXml::ckGetChildContent(xEntry,"name") + ", size: " + Str(sz)
            xLastMod.i = CkXml::ckFindChild(xEntry,"lastModTime")
            If CkXml::ckLastMethodSuccess(xEntry) = 1
                month.i = CkXml::ckGetAttrValueInt(xLastMod,"m")
                year.i = CkXml::ckGetAttrValueInt(xLastMod,"y")
                day.i = CkXml::ckGetAttrValueInt(xLastMod,"d")
                Debug "    YYYY-MM-DD: " + Str(year) + "-" + Str(month) + "-" + Str(day)
                CkXml::ckDispose(xLastMod)

            EndIf

        EndIf

        CkXml::ckDispose(xEntry)

        i = i + 1
    Wend

    CkFtp2::ckDisconnect(ftp)

    Debug "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::ckDispose(ftp)
    CkXml::ckDispose(xml)


    ProcedureReturn
EndProcedure