如何用idftp下载ftp上的某个文件夹下的所有文件?(100分)

  • 主题发起人 主题发起人 fenghai4690
  • 开始时间 开始时间
F

fenghai4690

Unregistered / Unconfirmed
GUEST, unregistred user!
idftp1.connect;
IdFTP1.ChangeDir(afilename);
idftp1.List;
filecount:=idftp1.DirectoryListing.Count;
for i:=0 to filecount-1 do
begin
idFTP1.Get(idFTP1.DirectoryListing.FileName,apath,true);
end;
这段代码执行到idftp1.list会报错,说"ConnectionClosedGracefully".最要命的是idftp1.DirectoryListing.Count返回植始终为0,请问这段代码错在哪里?该如何改正,谢谢!
 
以下是我自己写的IDFTP下载的一个程序的片断,你自己看看吧。

function login_ftp(ftp_host,ftp_username,ftp_password:string):boolean;
begin
my_ftp_form1.idftp1.Host:=ftp_host;
my_ftp_form1.idftp1.Username:=ftp_username;
my_ftp_form1.idftp1.Password:=ftp_password;
my_ftp_form1.idftp1.Disconnect;
my_ftp_form1.idftp1.Quit;
if uppercase(paramstr(4))='/P' then my_ftp_form1.idftp1.passive:=true else my_ftp_form1.idftp1.passive:=false;
if uppercase(paramstr(5))='/L' then my_ftp_form1.idftp1.ReadTimeout:=0 else my_ftp_form1.idftp1.ReadTimeout:=60000;
try
my_ftp_form1.idftp1.Connect;
application.ProcessMessages;
result:=true;
except
result:=false;
my_ftp_form1.suiEdit1.Text:='FTP '+ini_host_address+' Connection Error !';
write_connection_error_info;
my_ftp_form1.idftp1.Disconnect;
my_ftp_form1.idftp1.Quit;
closefile(my_ftp_log_file);
delay(6000);
exit_program;
end;
end;

login_ftp(ini_host_address,ini_user_id,ini_password);
Application.ProcessMessages;
my_ftp_form1.idftp1.ChangeDir(ini_source_folder);
my_ftp_form1.idftp1.list(nil);
for i:=0 to my_ftp_form1.idFTP1.DirectoryListing.Count-1 do
begin
 
谢谢weiliu.但是我执行后得到的idFTP1.DirectoryListing.Count是0.那个目录下是有文件的,我用get方法指定某个具体的文件能下下来.
 
你的是idftp.list还是idftp.list(nil)?
 
都试了,count植始终为0.用list(memo1.lines)能看到文件列表.实在不知道为什么,望指点迷津.
 
我的INDY是从网上下载下来的9.0的,你如果用的是DELPHI自带的可以换一个试试。
 
我刚才从网上下了以下几个版本都试了:9.0.18,9.0.19,10.0.76,10.1.5都一样的问题。我用的是D7,以下是我的测试程序源码,麻烦帮我看一下。to:weiliu 可不可以帮你的indy发一分给我,fenghai4690@163.com,谢谢!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdFTP, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
IdFTP1: TIdFTP;
procedure Button1Click(Sender: TObject);
private
procedure getfile(apath:string);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure Tform1.getfile(apath:string);
var
i,filecount:integer;
begin
try
IdFTP1.Connect;
idftp1.List(nil);
Application.ProcessMessages;
for i:=0 to idFTP1.DirectoryListing.Count-1 do
begin
idFTP1.Get(idFTP1.DirectoryListing.FileName,apath,true);
end;
idftp1.Disconnect;
except
idftp1.Disconnect;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
idftp1.Host:=hostip;
idftp1.Port:=21;
idftp1.Username:='temp';
idftp1.Password:='temp';
getfile('g:/temp/');
end;

end.
 
我用的是D6,INDY是Indy 9.0.4 beta.
从你的情况来看,好像不是INDY版本的问题了,看看你的FTP做了什么特殊的设置,或试试将PASSIVE方式变换一下。另外,你的传输方式是设定了二进制方式的吧。
我把我这个INDY也传给你一份。
已经送出给你,望查收。
 
谢谢,已收到.ftp设置应该没有问题,如果我用idftp1.list(memo1.lines)就能得到列表.
 
你那个FTP是保密的吗?如果不是,你把密码和ID通过EMAIL告诉我,我在这里帮你试试。
 
不好意思,是内网的,所以你上不了.用你给我的indy试了,报错,运行不起来.说没有某个属性,郁闷啊
 
用自帶的demo是否單個文件能下的成功,可以的話就前面套個循還,不可以就是Ftp Server有問題了.
 
我的INDY我用了很长时间了,没有问题。
另外,你可以把你的程序试着去读取其它的FTP,如果在其它的FTP正常,就你这个FTP不正常,则可能是你这个FTP做了什么限制或特殊设定。
我初步认为是属于这种情况。
 
http://www.delphibbs.com/keylife/images/u196832/FTP_Update20060701.rar
你发了封邮件给我是吧? fanlunting这个是吧?
上面这个例子没有下载一个文件夹的全部文件,但可以下载选中的全部文件,IIS里的FTP测试过.
 

Similar threads

后退
顶部