这是一个用idFTP遍历整个目录----下载的程序
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdFTP,IdFTPList;type
  TForm1 = class(TForm)
    idFTP: TIdFTP;
    Button1: TButton;
    lb_num: TLabel;
    procedure Button1Click(Sender: TObject);
  private    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
 procedure FTP_DownloadDir(var idFTP : TIdFtp;RemoteDir,LocalDir : string);label Files ;vari,DirCount : integer;beginif not DirectoryExists(LocalDir + RemoteDir) thenForceDirectories(LocalDir + RemoteDir);idFTP.ChangeDir(RemoteDir);idFTP.List(nil);DirCount := idFTP.DirectoryListing.Count ;if DirCount = 0 thenbeginidFTP.ChangeDirUp;idFTP.List(nil);end;for i := 0 to DirCount - 1 dobeginif DirCount <> idFTP.DirectoryListing.Count thenbeginrepeatidFTP.ChangeDirUp;idFTP.List(nil);until DirCount = idFTP.DirectoryListing.Count ;end;if idFTP.DirectoryListing[i].ItemType= ditDirectory thenFTP_DownloadDir(idFTP,idFTP.DirectoryListing[i].FileName,LocalDir + RemoteDir + '\')else
 begin
idFTP.Get(idFTP.DirectoryListing[i].FileName,LocalDir + RemoteDir + '\' +idFTP.DirectoryListing[i].FileName,true);Form1.lb_num.Caption := IntToStr(StrToInt(Form1.lb_num.Caption) + 1);Form1.lb_num.Update;if i = DirCount - 1 thenbeginidFTP.ChangeDirUp;idFTP.List(nil);end;end;end;end;
procedure TForm1.Button1Click(Sender: TObject);begin
idFTP.Host:='ip';
idFTP.Username:='username';
idFTP.Password:='12345678';
idFTP.Connect();if idFTP.Connected thenbeginidFTP.ChangeDir('');FTP_DownloadDir(idFTP,'nihao','c:\123\');
  idFTP.Disconnect ;
end; 
end;
end.