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

原创 2001年04月24日 11:33:00

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

以命令方式从FTP 服务器下载文件到本地指定目录

众所周知,FTP命令是FTP服务器用户使用最频繁的命令之一,熟悉并灵活的运用FTP命令,可以大大的方便使用者。 我们假设有一台FTP Server, FTP Server :192.168.80.1...
  • hongtashan11
  • hongtashan11
  • 2013年03月05日 10:24
  • 9725

libcurl 下载ftp服务器全部文件

原:http://blog.csdn.net/mp295345033/article/details/49487347 最近做的一个任务,项目的需求,需要下载ftp上的全部文件,没有上传,只有下载...
  • qq_16209077
  • qq_16209077
  • 2016年07月20日 23:27
  • 16761

python实现的ftp自动上传下载程序(支持目录递归操作)----转

转自 : http://www.cppblog.com/fwxjj/archive/2011/12/14/162085.html 因为python脚本可以直接用文本工具打开修改,所以没有设置...
  • xiaoxianerqq
  • xiaoxianerqq
  • 2016年02月19日 15:51
  • 1796

Delphi 用IdFtp控件实现ftp的全目录下载

首先是在本机上建立一个FTP服务器,方法参考【百度经验-Windows7上开启ftp服务器功能】http://jingyan.baidu.com/article/f54ae2fc3521d51e92b...
  • iailp47
  • iailp47
  • 2015年07月01日 11:06
  • 3050

libcurl库的使用支持http、https、ftp(上传、下载、远端目录列表获取)

这里是libcurl库的一个简单封装 这里当然有一个弊端,接口没有提供http header参数和cookie。大家自己稍微修改下 这里面主要是学习如何使用libcurl库。 头文件: #pra...
  • wu110112
  • wu110112
  • 2017年06月07日 13:16
  • 685

python使用ftplib模块实现ftp目录嵌套下载

import ftplib, os conn = ftplib.FTP() conn.connect('10.10.22.90') conn.login() dirname = "linux" def...
  • u010872995
  • u010872995
  • 2015年05月27日 20:15
  • 1647

Filezilla FTP Server 设置帐号主目录文件夹的方法和多个帐号共享一个文件夹的方法

  • 2013年09月03日 15:59
  • 119KB
  • 下载

j2se树目录控件JTree的操作示例

右键添加、编辑、删除节点。 5种遍历节点的方法。 public class my_tree extends JFrame implements ActionListener,MouseLi...
  • mingli_a
  • mingli_a
  • 2015年03月12日 15:56
  • 294

ezftp.ocx(ftp下载控件)

  • 2008年11月19日 08:50
  • 29KB
  • 下载

演示制作基于API的FTP程序(不使用控件)

  • 2002年09月30日 00:00
  • 25KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用ftp控件下载一个目录2
举报原因:
原因补充:

(最多只允许输入30个字)