Sample code for 30+ languages & platforms
Tcl

Get FTP Directory Listing as XML

See more FTP Examples

Demonstrates how to call GetXmlDirListing and parse the results.

Chilkat Tcl Downloads

Tcl

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