大放血:恳望得到帮助,有关ftp下载上传整个目录包括其中文件的问题。(200分)

P

pwuleiq

Unregistered / Unconfirmed
GUEST, unregistred user!
在网上找了无数的资料,都不能满足既下载上传整个目录,又下载上传目录中的文件。
看到这么一篇思路倒是不错,可惜接触delphi时间太短,工期又紧,不是很明白。
请大侠指点12:

算法如下:
(1)用一个动态数组来保存ftp目录;定义一个游标来访问动态数组;
(2)其实状态,设置需要下载的根目录保存到数组,游标初始值为0;
(3)通过游标得到目录名,通过FtpFind方法来获得此目录下的所有文件和目录,
如果是文件下载,否则保存目录名到数组中;
(4)游标下移,如果游标小于或等于数组的长度,执行(2);否则,下载完毕;

还有搞目录的一段代码:
中间两行有注释的地方file:是什么意思???[:)]

delphi中的nmftp控件中Download函数只能下载一个文件,没有提供一个下载整个目录(包含子目录)的函数。
我编写了个实现目录下载功能的方法,需要用到该功能的用户可参考一下。
file://目录下载
function tftp.ex_download(remote_dir,local_dir:string):boolean;
var
i,j,count1:integer;
att,ss:string;
current_dir:string;
temp_dir:string;
begin
try begin
NMFTP1.ChangeDir(remote_dir);
current_dir:=remote_dir;
temp_dir:=copy(current_dir,2,length(current_dir));
if not DirectoryExists(local_dir) then CreateDir(local_dir);
if not directoryexists(local_dir+temp_dir) then createdir(local_dir+temp_dir);
nmftp1.ParseList:=true;
NMftp1.list;
count1:=nmftp1.FTPDirectoryList.name.Count;
for i:=0 to count1-1 do begin
file://必须
NMFTP1.ChangeDir(current_dir);
nmftp1.list;
ss:=nmftp1.FTPDirectoryList.name.Strings;
att:=nmftp1.FTPDirectoryList.Attribute.Strings;
if (copy(pchar(att),1,1)<>'d')and(copy(pchar(att),1,1)<>'D') then begin
if not DirectoryExists(local_dir) then CreateDir(local_dir);
NMFTP1.Download(current_dir+ss,local_dir+temp_dir+ss);
end
else begin
if not directoryexists(local_dir+temp_dir+ss) then createdir(local_dir+temp_dir+ss);
file://递归调用
ex_download(remote_dir+ss+'/',local_dir);
end;
end;
result:=true;
end
except
On E:Exception do begin
result:=false;
end;
end;
end;

ICS可以实现我要的功能吗?哪里有下载?

还有什么新的好办法?

谢谢谢谢了,帮兄弟一把,有机会兄弟一定报答!
 
使用ftp控件下载目录

delphi中的nmftp控件中Download函数只能下载一个文件,没有提供一个下载整个目录
(包含子目录)的函数。

编写了个实现目录下载功能的方法:

file://目录下载

function tftp.ex_download(remote_dir,local_dir:string):boolean;

var

i,j,count1:integer;

att,ss:string;

current_dir:string;

temp_dir:string;

begin

try begin

NMFTP1.ChangeDir(remote_dir);

current_dir:=remote_dir;

temp_dir:=copy(current_dir,2,length(current_dir));

if not DirectoryExists(local_dir) then CreateDir(local_dir);

if not directoryexists(local_dir+temp_dir) then createdir(local_dir+temp_dir);

nmftp1.ParseList:=true;

NMftp1.list;

count1:=nmftp1.FTPDirectoryList.name.Count;

for i:=0 to count1-1 do begin

file://必须

NMFTP1.ChangeDir(current_dir);

nmftp1.list;

ss:=nmftp1.FTPDirectoryList.name.Strings;

att:=nmftp1.FTPDirectoryList.Attribute.Strings;

if (copy(pchar(att),1,1)<>'d')and(copy(pchar(att),1,1)<>'D') then begin

if not DirectoryExists(local_dir) then CreateDir(local_dir);

NMFTP1.Download(current_dir+ss,local_dir+temp_dir+ss);

end

else begin

if not directoryexists(local_dir+temp_dir+ss) then createdir(local_dir+temp_dir+ss);

file://递归调用

ex_download(remote_dir+ss+'/',local_dir);

end;

end;

result:=true;

end

except

On E:Exception do begin

result:=false;

end;

end;

end;
 
这代码我贴过了,关键两行有注释的地方file:是什么意思???
 
没什么意思,是一个叫file的大富翁注释的吧
网上有很多代码里都有他的注释的 [:D]

以上代码应该可以实现你的要求,它是用递归实现的,
若将其改成循环,就同你的算法思路差不多了。
 
谢谢各位的解释:
但是代码中
两行有注释的地方file:是什么意思???
我在调试的时候总是在这里出问题???
 
删掉 file:
 
我前段时间写了一个用NMFTP上传整个目录(包括子目录)的程序,你如果还想要的话请
留下地址。我发给你。
 
那两个只是注释而已,删掉就是了。
如果要做商业软件的话,最好别用NMFtp控件,有致命的BUG,极不稳定,我深受其害,现
已改用ICS。
其实下载整个目录没有什么复杂的地方,关键就是一个递归调用函数。
 
大哥,ics怎么用呀?
 
顶部