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;
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;