使用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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

用来在客户端和任何FTP服务器之间拷贝文件。PowerTCP FTP Tool可以用在客户端或服务器上来执行文件的传输,而且它只需要一行代码。可以用简单的属性来设置选项,甚至数据文件可以放到内存中。目录表可以作为对象来读取,所以不需要解析。PowerTCP FTP Tool甚至包含一个MGET方法,用来下载多个文件——甚至是整个目录树,而且只需要一行代码。目前该工具包括.NET wrapper DLL、9个新的VB.NET样例和.NET文件。 概述 只需调用一个方法就可以实现在客户端和任何FTP服务器之间拷贝文件。简单的属性提供了精细的控制功能,而且文件数据甚至可以放入内存/或从内存读取。目录表可以作为对象读取,所以不需要解析——对于大多数应用程序来说,该功能很有用。 · 与.NET 100%兼容,运用了.NET COM interop技术,包含样例。 · FTP ActiveX 控件 可以用于传统的客户端应用程序和服务,以及可升级的ASP应用程序。 · 可通过简单的属性来设置文件传输选项,在需要时,可以自动设置文件传输选项,该特点使该控件尤其有效和易于使用。 · 包含对传输文件以zip格式自动压缩/解压缩的内部支持。 · 目录表作为对象来读取,所以不需要解析源列表。 · 包含MPUT和MGET方法,用来上传/下载多个文件——甚至整个目录树,而且只需要一行代码。 · 支持 COM+ Component Services。 · 可用于多线程的环境。 · 可用于事件驱动的和脚本编写的(模块化)应用程序。 · 包含免费版权。 · 包含封装类,可以方便地集成到Visual C++中。
相关推荐
产品博客: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 支持文件类型:任意类型
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值