自定义的过程:procedure TForm1.downFile_Dir(s_sourcepath:string;s_dest:string; c_ftp:TIdFTP);
var
LS: TStringList;
FileCount: Integer;
begin
LS := TStringList.Create;
if StrRScan(pchar(s_dest),'\')<>'\' then
s_dest:=s_dest+'\';
try
c_ftp.ChangeDir(s_sourcepath);
c_ftp.List(LS);
for FileCount:=0 to LS.Count-1 do
begin
with c_ftp.DirectoryListing.Items[FileCount] do
if ItemType = ditDirectory then //文件夹
begin
MkDir(s_dest+filename);
downFile_Dir(filename,s_dest+filename, c_ftp);
end
else
begin
c_ftp.Get(filename,s_dest+FileName,true);
end
end;
finally
LS.Free;
c_ftp.ChangeDirUp;
ShowMessage(c_ftp.RetrieveCurrentDir);
end;
end;调用的结果是它可以往文件夹里面去,但是目录数的子叶完了以后,返回上一层时就出错了.
我想是不是过程中调用的c_ftp:TIdFTP是不是没有创建新的实例,导致list index out of bounds。
不知有什么解决的好办法?
var
LS: TStringList;
FileCount: Integer;
begin
LS := TStringList.Create;
if StrRScan(pchar(s_dest),'\')<>'\' then
s_dest:=s_dest+'\';
try
c_ftp.ChangeDir(s_sourcepath);
c_ftp.List(LS);
for FileCount:=0 to LS.Count-1 do
begin
with c_ftp.DirectoryListing.Items[FileCount] do
if ItemType = ditDirectory then //文件夹
begin
MkDir(s_dest+filename);
downFile_Dir(filename,s_dest+filename, c_ftp);
end
else
begin
c_ftp.Get(filename,s_dest+FileName,true);
end
end;
finally
LS.Free;
c_ftp.ChangeDirUp;
ShowMessage(c_ftp.RetrieveCurrentDir);
end;
end;调用的结果是它可以往文件夹里面去,但是目录数的子叶完了以后,返回上一层时就出错了.
我想是不是过程中调用的c_ftp:TIdFTP是不是没有创建新的实例,导致list index out of bounds。
不知有什么解决的好办法?
其实就是参数c_ftp:TIdFTP传过来是没有创建副本。就相当于这样的问题:
procedure TForm1.bb(e: Tedit;s:string);
begin
e.text:=s;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
bb(edit1,'sadfasdfsa');//edit1是一个文本框
end;
本人初学才两天,不知道应该如何在过程中将传过来的对象参数创建新的副本,还望能者多帮忙。感谢感谢!