C
C
Get FTP Directory Listing as XML
See more FTP Examples
Demonstrates how to call GetXmlDirListing and parse the results.Chilkat C Downloads
#include <C_CkFtp2.h>
#include <C_CkXml.h>
void ChilkatSample(void)
{
BOOL success;
HCkFtp2 ftp;
const char *xmlListing;
HCkXml xml;
int i;
int numEntries;
HCkXml xEntry;
int sz;
HCkXml xLastMod;
int month;
int year;
int day;
success = FALSE;
// This example assumes Chilkat Ftp2 to have been previously unlocked.
// See Unlock Ftp2 for sample code.
ftp = CkFtp2_Create();
CkFtp2_putHostname(ftp,"www.my-ftp-server.com");
CkFtp2_putUsername(ftp,"mFtpLogin");
CkFtp2_putPassword(ftp,"myFtpPassword");
// Connect to the FTP server.
success = CkFtp2_ConnectOnly(ftp);
if (success != TRUE) {
printf("%s\n",CkFtp2_lastErrorText(ftp));
CkFtp2_Dispose(ftp);
return;
}
// Authenticate with the FTP server.
success = CkFtp2_LoginAfterConnectOnly(ftp);
if (success != TRUE) {
printf("%s\n",CkFtp2_lastErrorText(ftp));
CkFtp2_Dispose(ftp);
return;
}
// Retrieve (in XML format) the HOME directory of this FTP account.
xmlListing = CkFtp2_getXmlDirListing(ftp,"*.*");
if (CkFtp2_getLastMethodSuccess(ftp) != TRUE) {
printf("%s\n",CkFtp2_lastErrorText(ftp));
CkFtp2_Dispose(ftp);
return;
}
// Now load the XML and parse it..
xml = CkXml_Create();
CkXml_LoadXml(xml,xmlListing);
printf("%s\n",CkXml_getXml(xml));
// Iterate over the XML...
i = 0;
numEntries = CkXml_getNumChildren(xml);
while (i < numEntries) {
xEntry = CkXml_GetChild(xml,i);
if (CkXml_TagEquals(xEntry,"dir") == TRUE) {
printf("Directory: %s\n",CkXml_content(xEntry));
}
else {
sz = CkXml_GetChildIntValue(xEntry,"size");
printf("File: %s, size: %d\n",CkXml_getChildContent(xEntry,"name"),sz);
xLastMod = CkXml_FindChild(xEntry,"lastModTime");
if (CkXml_getLastMethodSuccess(xEntry) == TRUE) {
month = CkXml_GetAttrValueInt(xLastMod,"m");
year = CkXml_GetAttrValueInt(xLastMod,"y");
day = CkXml_GetAttrValueInt(xLastMod,"d");
printf(" YYYY-MM-DD: %d-%d-%d\n",year,month,day);
CkXml_Dispose(xLastMod);
}
}
CkXml_Dispose(xEntry);
i = i + 1;
}
CkFtp2_Disconnect(ftp);
printf("Success.\n");
// 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_Dispose(ftp);
CkXml_Dispose(xml);
}