Tcl
Tcl
Get FTP Directory Listing as XML
See more FTP Examples
Demonstrates how to call GetXmlDirListing and parse the results.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example assumes Chilkat Ftp2 to have been previously unlocked.
# See Unlock Ftp2 for sample code.
set ftp [new_CkFtp2]
CkFtp2_put_Hostname $ftp "www.my-ftp-server.com"
CkFtp2_put_Username $ftp "mFtpLogin"
CkFtp2_put_Password $ftp "myFtpPassword"
# Connect to the FTP server.
set success [CkFtp2_ConnectOnly $ftp]
if {$success != 1} then {
puts [CkFtp2_lastErrorText $ftp]
delete_CkFtp2 $ftp
exit
}
# Authenticate with the FTP server.
set success [CkFtp2_LoginAfterConnectOnly $ftp]
if {$success != 1} then {
puts [CkFtp2_lastErrorText $ftp]
delete_CkFtp2 $ftp
exit
}
# Retrieve (in XML format) the HOME directory of this FTP account.
set xmlListing [CkFtp2_getXmlDirListing $ftp "*.*"]
if {[CkFtp2_get_LastMethodSuccess $ftp] != 1} then {
puts [CkFtp2_lastErrorText $ftp]
delete_CkFtp2 $ftp
exit
}
# Now load the XML and parse it..
set xml [new_CkXml]
CkXml_LoadXml $xml $xmlListing
puts [CkXml_getXml $xml]
# Iterate over the XML...
set i 0
set numEntries [CkXml_get_NumChildren $xml]
while {$i < $numEntries} {
# xEntry is a CkXml
set xEntry [CkXml_GetChild $xml $i]
if {[CkXml_TagEquals $xEntry "dir"] == 1} then {
puts "Directory: [CkXml_content $xEntry]"
} else {
set sz [CkXml_GetChildIntValue $xEntry "size"]
puts "File: [CkXml_getChildContent $xEntry name], size: $sz"
# xLastMod is a CkXml
set xLastMod [CkXml_FindChild $xEntry "lastModTime"]
if {[CkXml_get_LastMethodSuccess $xEntry] == 1} then {
set month [CkXml_GetAttrValueInt $xLastMod "m"]
set year [CkXml_GetAttrValueInt $xLastMod "y"]
set day [CkXml_GetAttrValueInt $xLastMod "d"]
puts " YYYY-MM-DD: $year-$month-$day"
delete_CkXml $xLastMod
}
}
delete_CkXml $xEntry
set i [expr $i + 1]
}
CkFtp2_Disconnect $ftp
puts "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>
#
#
delete_CkFtp2 $ftp
delete_CkXml $xml