1 首先这个过程是在connected以后执行的
2 只下载不上传,网络环境是内网,绝对ok。
3 connected以后马上执行呢,没有问题。问题就是过一段时间后执行,且其中某个文件夹文件过多,有500+ 就在下载文件夹内容的时候。报错。file sent ok  //根本没上传。id怎么报错这个?
Connection Closed Gracefully  然后就是错误。这个时候只要重新connect以后,还是可以执行下载。
procedure TForm1.tmr2Timer(Sender: TObject);//连接保持检测。10秒一次
begin
if not IdFTP.Connected then
begin
    
    Exit;
end;
if TransferrignData then Exit;//在下载中则不noop
IdFTP.Noop;
end;
procedure Tform1.download ;
var
  name:string;
  tt :TIdFTPListItems; //ftp列表
  t : TIdFTPListItem;  //ftp单条记录
  j:Integer;
  ls:TStringList ;
begin
    if idftp.Connected =False then btn1.Click;
        idftp.ChangeDir('/Ext');
        ls := TStringList.Create;
      try
        idftp.ChangeDir('/Ext');
        idftp.ChangeDir(ip.Text);
        idftp.ChangeDir(ftp_date.Text);      except
        mmo1.Lines.Add(ip.Text+'无此目录');
      end;      idftp.List(ls);      IdFTP.TransferType := ftBinary;
      tt:=IdFTP.directorylisting;
      forcedirectories ('.\'+ip.text+'\'+ftp_date.Text);
      for j :=2  to idftp.DirectoryListing.Count-1   do
      begin
        t:=tt.items[j];
        if IdFTP.DirectoryListing.Items[j].ItemType = ditfile then //如果是文件
        begin
          if Length(t.FileName)<11   then name :='data.txt'
          else name:=t.FileName;
          try
           IdFTP.Get(t.FileName ,ip.text+'\'+ftp_date.Text+'\'+name,True);          except          end;        end;
      end;
    mmo1.Lines.Add(ip.text+'_'+ftp_date.Text+'下载完毕');
    mmo2.Lines.Add(ip.text+'_'+ftp_date.Text+'='+inttostr(idftp.DirectoryListing.Count-2)+'下载完毕');    idftp.ChangeDir('../');
    idftp.ChangeDir('../');
    idftp.ChangeDir('../');
end;