使用ftp控件下载一个目录2

使用ftp控件下载一个目录2

上次写了篇“使用ftp控件下载一个目录”,里面写的目录下载函数在nt下使用正常,但升级到2000下不能正常使用。
将windows 2000的ftp站点属性中的目录列表风格改为unix也不行。我认为是delphi自带的NMFTP控件太老,对2000支持不好的原因。我在提供该控件的公司的网站上想下载一个最新版本,发现要交$199.95费用!
没办法,干脆不用控件,直接用微软提供的相关ftp函数直接来完成。使用进栈和出栈的原理,有目录和文件就进栈,下载后就出栈,等到栈空的时候也就是整个目录(包含各级子目录)下载完毕的时候。
整个目录下载的函数如下,有兴趣着可参考一下:

function  Tmyftp.dir_download(remotedir:string;localdir:string):Boolean;
var dirstack: TStack;
    prtdir,nowprtdir: PDirstru;
    dirover : Boolean;
begin
  result := false;
  dirstack := TStack.create;
  new(prtdir);
  if prtdir<>Nil then
     begin
       prtdir.ftpdirstr := remotedir;
       prtdir.localdirstr := localdir;
       prtdir.finishflag := false;
       dirstack.Push(prtdir);
       if not directoryexists(localdir) then
          createdir(localdir);
     end;

  while dirstack.count>0 do
    begin
      nowprtdir := dirstack.pop;
      change_dir(nowprtdir^.ftpdirstr);
      ListHandle := FtpFindFirstFile(FtpHandle,'*.*',FindData,0,0);
      if ListHandle <> Nil then
         begin
           dirover := true;
           while dirover do
              begin
                if finddata.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
                   begin
                     new(prtdir);
                     if prtdir <> Nil then
                        begin
                          prtdir.ftpdirstr := nowprtdir^.ftpdirstr+finddata.cfilename+'/';
                          prtdir.localdirstr := nowprtdir^.localdirstr+finddata.cfilename+'/';
                          prtdir.finishflag := false;
                          dirstack.Push(prtdir);
                          if not directoryexists(nowprtdir^.localdirstr+trim(finddata.cfilename)) then
                                 createdir(nowprtdir^.localdirstr+trim(finddata.cfilename));
                        end
                      else
                        begin
                           errno := 4;
                           errmsg := '在目录download过程中不能申请得到内存。';
                           raise FtpException.create(errmsg);
                        end
                   end
                 else  begin
                         try
                            if not FtpGetFile(FtpHandle,pchar(nowprtdir^.ftpdirstr+finddata.cfilename),
                                              pchar(nowprtdir^.localdirstr+finddata.cfilename),false,0,0,0) then
                               begin
                                 errno := 5;
                                 errmsg := '在download文件 '+nowprtdir^.ftpdirstr+finddata.cfilename+' 时发生错误。';
                                 raise FtpException.create(errmsg);
                               end;
                         except
                            on exception do
                               begin
                                 errno := 6;
                                 errmsg := '在download文件 '+nowprtdir^.ftpdirstr+finddata.cfilename+' 时发生例外错误。';
                                 raise FtpException.create(errmsg);
                               end;
                         end 
                       end;

                dirover := InternetFindNextFile(ListHandle,@finddata)
              end;
           InternetCloseHandle(ListHandle);
         end
       else
         begin
         end;
      dispose(nowprtdir);
    end;  
end;

http://www.softcows.com/cn

产品博客:http://www.cnblogs.com/xproer/ 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/file-uploader/index.aspx 在线演示:http://www.ncmem.com/products/file-uploader/demo/index.html 开发文档:V1.0,V2.0 升级日志:V1.0,V2.0 下载地址:V1.0,V2.0 文档下载:V1.0,V2.0 联系信箱:1085617561@qq.com 联系QQ:1085617561 新颖网络FTP文件上传控件一个专门针对大文件传输而制定的解决方案。它能够帮助开发者实现文件断点续传和文件批量上传功能。特别适合有大文件上传需求的站点,例如视频文件上传,大型资源分享网站,网盘网站。与传统的Flash和HTTP上传控件相比新颖网络FTP文件上传控件更稳定,扩展性更强,而且整合也更加简单。通过新颖网络开发团队提供的JavaScript SDK,开发者可以轻而易举的将插件无缝的集成到现有系统中。 借助于此解决方案,开发者能够为用户带来更好的用户体验。 产品特点如下: 1.支持文件断点续传 2.基于标准FTP协议。 3.支持文件批量上传。 4.支持文件拖拽操作。 5.免费提供JavaScript SDK包,方便您将插件快速集成到已有网站中。 6.免费提供VC(MFC)演示程序,方便您将插件快速集成到软件产品中。 支持语言:PHP,JSP,ASP,ASP.NET(C#),ASP.NET(VB),C++,VC,VC.NET,VB,VB.NET,C#,C#.NET,Delphi,C++ Builder 支持平台:Visual Studio 6.0/2002/2003/2005/2008/2010,C++ Builder 6.0/2009/2010,Delphi 7/2009,Visual Basic 6.0/2008 支持脚本:JavaScript,VBScript 支持系统:Windows NT,Windows 2003,Windows XP,Windows Vista,Windows 7,Linux 支持FTP:Serv-U,Microsoft FTP Server,FileZilla Server 支持文件大小:100GB 支持文件类型:任意类型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

aton

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值