indyftp下载文件有关问题

indyftp下载文件问题


function huoq(sip:string;sdate:string):string ;
var
  con:TIdFTP;
  name:string;
  tt :TIdFTPListItems; //ftp列表
  t : TIdFTPListItem;  //ftp单条记录
  j,f:Integer;
  ls:TStringList ;
begin
  f:=1;
  tt:=nil;
  con:=TIdFTP.Create(nil);
  con.Host:='127.0.0.1' ;
  con.Username:='dh';
  con.Password:='dh';
  con.Connect;
  mainform.mmo1.lines.add('ftp success');
  ls := TStringList.Create;    //获取文件列表
  con.ChangeDir(sip);
  con.ChangeDir(sdate);
  mainform.mmo1.lines.add('ftp success change dir');
  mainform.mmo1.lines.add(con.RetrieveCurrentDir);
  try
    Application.ProcessMessages;
    con.List(ls);-------------有时候经常卡住这句,但是有时候可以,也不抛出异常,就是无响应
    f:=con.DirectoryListing.Count-1 ;  //获取文件数量
    mainform.mmo1.lines.add('num='+inttostr(f));
    tt:=con.directorylisting;
  except
              on e: Exception do
              Begin
                mainform.mmo1.Lines.Add(PChar(E.Message));
                log4error(PChar(E.Message)+'_下载失败');
                //mmo1.Lines.Add(name+'_'+'下载失败');
              End;
  end;


========如果我在下载文件完成的时候需要做一次判断,那么在自己创建的实例里面该怎么加入下面这个onafterget过程。每个文件下载完成都要判断,是否完成,完成后实现onafterget过程,这个是indyftp自己的过程
procedure Tmainform.idftpAfterGet(ASender: TObject; VStream: TStream);
begin

end;

------解决思路----------------------
这个问题我也遇到了  

我的解决办法如下:

1.  con.List(ls);  list这个函数放弃使用, 至于怎么获取文件列表就自己通过网络传输了

2.  注意下FFTP.Passive这个属性, 有的网络需要开启