解决方案 »

  1.   

    没有遇到个此问题,你换一个FTP服务器
      

  2.   

    procedure Tmainform.download ;
    var
      name:string;
      tt :TIdFTPListItems; //ftp列表
      t : TIdFTPListItem;  //ftp单条记录
      j,f: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);
            edt1.Text := IdFTP.RetrieveCurrentDir;
            idftp.List(ls);  //这句很关键啊
            f:=idftp.DirectoryListing.Count-1 ;
            {
            if Trim(ip.Text)='255.255.8.80' then
            begin
            ShowMessage(IntToStr(f));
            end;
                  on e: Exception do
          Begin
            log4error(PChar(E.Message)+'_连接超时');
          End;
            }
          except
            on e: Exception do
            begin
            log4error(PChar(E.Message)+'_改变目录错误');
            mmo1.Lines.Add(PChar(E.Message));
            mmo1.Lines.Add(ip.Text+'_'+ftp_date.Text+'无数据');        Exit;//没有会出现list index out of bounds 错误
            f:=0;
            end;      end;      //IdFTP.TransferType := ftBinary;
          tt:=IdFTP.directorylisting;
          forcedirectories ('.\'+ip.text+'\'+ftp_date.Text);
          for j :=0  to f   do
          begin
            t:=tt.items[j];
            if (IdFTP.DirectoryListing.Items[j].ItemType = ditfile) and (f>0) 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,False);
              except              on e: Exception do
                  Begin
                    mmo1.Lines.Add(PChar(E.Message)+name);
                    log4error(PChar(E.Message)+'_下载失败');
                    mmo1.Lines.Add(name+'_'+'下载失败');
                  End;        end;
          end;
        //mmo1.Lines.Add(ip.text+'_'+ftp_date.Text+'下载完毕');
          end;
           //下载完毕当前目录后退出到根目录
          mmo2.Lines.Add(ip.text+'_'+ftp_date.Text+'='+inttostr(f)+'下载完毕');
          idftp.ChangeDir('../');
          idftp.ChangeDir('../');
          idftp.ChangeDir('../');
    end;