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可以实现我要的功能吗?哪里有下载?
还有什么新的好办法?
谢谢谢谢了,帮兄弟一把,有机会兄弟一定报答!
看到这么一篇思路倒是不错,可惜接触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可以实现我要的功能吗?哪里有下载?
还有什么新的好办法?
谢谢谢谢了,帮兄弟一把,有机会兄弟一定报答!