Simon Bang is totally right.
Anyway, I use the following recursive approach (which is pretty much the same)
(keep in mind that this is just sample code to illustrate the logic):
public void DownloadFtpFolder(string ftpFolderPath)
FtpFolder fo = new FtpFolder(folderPath);
foreach (FtpFile fi in fo.FtpFiles)
foreach (FtpFolder f in fo.FtpFolders)
public void DownloadFtpFile(string ftpFilePath)
You need a ftp library for downloading the actual files and navigating the folders, but I hope this illustrates how this could be done theoratically.