本人写一个FTP站点文件列表的程序,功能已经实现,但是速度很慢,我实现的办法如下:
var
  pdata:twin32finddata;
  enum:hinternet;
  r:boolean;
  str:string;
  FileName,DirName:Tstrings;      //存储文件名和目录名
  i,j:integer;
  MyTreeNode1, MyTreeNode2: TTreeNode;
begin
  hopen:=internetopen(pchar('hello'),0,NIL,NIL,0);
  hconnection:=internetconnect(hopen,pchar(Edit_Host.Text),strtoint(Edit_Port.Text),pchar(Edit_UserName.Text),pchar(Edit_PassWord.Text),internet_service_ftp,0,255);
  enum:=ftpfindfirstfile(hconnection,'*.*',pdata,0,0);  //查找第一个文件
  r:=enum <> nil;
  FileName:=TstringList.Create;
  DirName:=TstringList.Create;
  while r do
  begin
     内部做循环
     如果是目录,就调用另外一个函数,该函数跟这个函数功能一样,内部用递归调用,实现所以目录的遍历,    r:=internetfindnextfile(enum,@pdata);//查找下一个文件
  end;
  InternetCloseHandle(enum);~~~~~~~~~~~~~
怀疑瓶颈是在InternetCloseHandle、FtpFindFirstFile和internetfindnextfile函数,问有没有其他方式实现ftp站点文件列表编程,请教

解决方案 »

  1.   

    IdFtp没用过,我的目标是打开某FTP站点后列出该站点全部目录结构和全面文件,跟windows下面的tree命令一样,现在程序能实现,但是ftp站点内容多的情况下,程序运行缓慢,怀疑是多次递归调用中InternetCloseHandle、FtpFindFirstFile和internetfindnextfile函数执行的瓶颈,该如何解决,或者不用这些函数,用其他办法如何解决,能不能给个详细点的答案