怎样实现下载一个目录(包括目录下所有文件和子目录),用NMFTP(50分)

  • 主题发起人 主题发起人 saccharin
  • 开始时间 开始时间
如果你是要一个算法,如下就是:
其实做法比较简单,用一动态数组来保存子目录,用计数器来记录数组的长度,做法如
下:
(1)保存需要下载的子目录到数组中,同时记录数组的长度;并且下载当前目录的文件;
把标志位置1.
(2)通过标志为来访问子目录数组的元素,如果此子目录的下还有子目录,保存到数组中
,同时下载当前子目录的文件.
(3)标志位加1,如果标志位小于或等于数组的长度,进行(2);否则,程序结束;
 
有没有什么ftp控件可以实现目录下载?
 
先得到整个目录树结构。再从第一目录开始下载不就行了。
 
ftp 也是一个一个下载, 只是你操作一下,它替你全做了。
 
procedure downloaddir(directorylistbox1:tdirectorylistbox;nmftp1:tnmftp;Filelistbox4,Filelistbox2:tFilelistbox;dirname:string);
var T,S:array [1..100] of string;
Q,P,temp:string;
top,i:integer;
begin
top:=1;
T[1]:=DirectoryListBox1.Directory+'/'+dirname;
S[1]:=NMFTP1.CurrentDir+'/'+dirname;
mkdir(DirectoryListBox1.Directory+'/'+dirname);
while top<>0 do
begin
p:=s[top]; //远地
q:=t[top]; //本地
NMFTP1.ChangeDir(p);
//mkdir(q);
chdir(q);
temp:=q;
top:=top-1;
if FileLIstBox4.Items.Count<>0 then
for i:=0 to FileListBox4.Items.Count-1 do
nmftp1.download(p+'/'+Filelistbox4.items.strings ,q+'/'+Filelistbox4.items.strings);
if FileLIstBox2.Items.Count>1 then
for i:=1 to FileListBox2.Items.Count-1 do
begin
top:=top+1;
s[top]:=NMFTP1.CurrentDir+'/'+FileListBox2.Items.Strings;
mkdir(FileListBox2.Items.Strings);
t[top]:=temp+'/'+FileListBox2.Items.Strings;
end;
end;
showmessage('目录下载完毕!');
 
递归,你知道怎样列本地目录下的所有子目录和文件吗?
 
directorylistbox
filelistbox
drivecombobox
 
多人接受答案了。
 
后退
顶部