PureBasic
PureBasic
Get FTP Directory Listing as XML
See more FTP Examples
Demonstrates how to call GetXmlDirListing and parse the results.Chilkat PureBasic Downloads
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