首先是在本机上建立一个FTP服务器,方法参考【百度经验-Windows7上开启ftp服务器功能】http://jingyan.baidu.com/article/f54ae2fc3521d51e92b849c7.html。

我的本机地址是172.20.16.76,端口号9500,FTP用户名“lyc",密码"123456"

下载到本地的目录是:E:\delphi7Project\ftpDownload\

constLOCALHOST='172.20.16.76';                        //FTP服务器地址PORT=9500;                                       //FTP服务器端口号9500FTP_USERNAME='lyc';                              //FTP服务器用户名FTP_PASSWORD='123456';                           //FTP服务器密码LOCAL_DIR='E:\delphi7Project\ftpDownload\';      //下载到本地的目录

实现全目录下载的核心就是递归调用下载函数,往下一层层的下载子文件夹的数据

procedure TForm1.doDownload(idftp:TIdFTP;dir:string);
vart : TIdFTPListItem;i : integer;fileName,foldName : String;
begin   //连接if not DirectoryExists(LOCAL_DIR+dir) then     //如果本地目录不存在则创建文件夹beginForceDirectories(LOCAL_DIR+dir);             //创建一个全路径的文件夹end;idftp.changedir(dir);                          //改变目录idftp.List(nil);                               //获取当前目录的信息idftp.TransferType := ftBinary;                //指定为二进制文件   或文本文件ftASCIIfor i:=0 to idftp.DirectoryListing.Count-1 dobegint := idftp.DirectoryListing.Items[i];        //得到一个文件相关信息fileName := t.FileName;                      //获取文件名if t.ItemType = ditFile then                 //如果是文件,则直接下载beginidftp.Get(fileName,LOCAL_DIR + dir+'\' + fileName,True); //下载到本地,并为覆盖endelse if (t.ItemType = ditdirectory) then     //如果是文件夹,则往下循环下载文件夹的内容beginfoldName :=t.FileName;doDownload(idftp,dir+'\'+foldName);    //递归调用,往下一层一层的循环下载子文件夹数据idFTP.ChangeDirUp();                   //返回上级目录idFTP.List(nil);end;end;
end;

以下是完整的代码部分:

ftpTest.pas

unit ftpTest;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,IdTCPClient, IdFTP, WebDisp;typeTForm1 = class(TForm)IdFTP1: TIdFTP;Button1: TButton;Memo1: TMemo;Label1: TLabel;Edit1: TEdit;Button2: TButton;Button3: TButton;OpenDialog1: TOpenDialog;Label2: TLabel;Edit2: TEdit;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);privateprocedure doDownload(idftp:TIdFTP;dir: string);{ Private declarations }public{ Public declarations }end;varForm1: TForm1;
constLOCALHOST='172.20.16.76';                        //FTP服务器地址PORT=9500;                                       //FTP服务器端口号9500FTP_USERNAME='lyc';                              //FTP服务器用户名FTP_PASSWORD='123456';                           //FTP服务器密码LOCAL_DIR='E:\delphi7Project\ftpDownload\';      //下载到本地的目录
implementationuses IdFTPList, IdFTPCommon;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
vari:integer;tr : Tstrings;
begin   //连接tr := TStringlist.Create;IdFTP1.Host := LOCALHOST; //FTP服务器地址 172.20.16.76IdFTP1.Port := PORT;      //FTP服务器端口号9500IdFTP1.Username := FTP_USERNAME; //FTP服务器用户名IdFTP1.Password := FTP_PASSWORD; //FTP服务器密码IdFTP1.Connect();   //连接到ftpIdFTP1.List(tr); //得到目录下所有文件列表Memo1.Lines.Assign(tr);tr.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
begin   //下载doDownload(IdFTP1,IdFTP1.RetrieveCurrentDir);
end;procedure TForm1.doDownload(idftp:TIdFTP;dir:string);
vart : TIdFTPListItem;i : integer;fileName,foldName : String;
begin   //连接if not DirectoryExists(LOCAL_DIR+dir) then     //如果本地目录不存在则创建文件夹beginForceDirectories(LOCAL_DIR+dir);             //创建一个全路径的文件夹end;idftp.changedir(dir);                          //改变目录idftp.List(nil);                               //获取当前目录的信息idftp.TransferType := ftBinary;                //指定为二进制文件   或文本文件ftASCIIfor i:=0 to idftp.DirectoryListing.Count-1 dobegint := idftp.DirectoryListing.Items[i];        //得到一个文件相关信息fileName := t.FileName;                      //获取文件名if t.ItemType = ditFile then                 //如果是文件,则直接下载beginidftp.Get(fileName,LOCAL_DIR + dir+'\' + fileName,True); //下载到本地,并为覆盖endelse if (t.ItemType = ditdirectory) then     //如果是文件夹,则往下循环下载文件夹的内容beginfoldName :=t.FileName;doDownload(idftp,dir+'\'+foldName);    //递归调用,往下一层一层的循环下载子文件夹数据idFTP.ChangeDirUp();                   //返回上级目录idFTP.List(nil);end;end;
end;procedure TForm1.Button3Click(Sender: TObject);
varfileName : string;
begin   //上传if OpenDialog1.Execute thenbeginfileName := OpenDialog1.FileName;IdFTP1.TransferType := ftBinary;IdFTP1.Put(fileName, ExtractFileName(fileName));end;
end;end.

ftpTest.dfm

object Form1: TForm1Left = 193Top = 136Width = 979Height = 563Caption = 'Form1'Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'MS Sans Serif'Font.Style = []OldCreateOrder = FalsePixelsPerInch = 96TextHeight = 13object Label1: TLabelLeft = 48Top = 24Width = 22Height = 13Caption = 'IP:'endobject Label2: TLabelLeft = 211Top = 24Width = 31Height = 13Caption = 'Port:'endobject Button1: TButtonLeft = 48Top = 56Width = 75Height = 25Caption = 'connectFTP'TabOrder = 2OnClick = Button1Clickendobject Memo1: TMemoLeft = 56Top = 96Width = 809Height = 377Lines.Strings = ('Memo1')ScrollBars = ssBothTabOrder = 5endobject Edit1: TEditLeft = 70Top = 20Width = 121Height = 21TabOrder = 0Text = '172.20.16.76'endobject Button2: TButtonLeft = 156Top = 56Width = 75Height = 25Caption = 'Download'TabOrder = 3OnClick = Button2Clickendobject Button3: TButtonLeft = 264Top = 56Width = 75Height = 25Caption = 'Button3'TabOrder = 4OnClick = Button3Clickendobject Edit2: TEditLeft = 242Top = 20Width = 122Height = 21TabOrder = 1Text = '9500'endobject IdFTP1: TIdFTPMaxLineAction = maExceptionReadTimeout = 0ProxySettings.ProxyType = fpcmNoneProxySettings.Port = 0Left = 800Top = 80endobject OpenDialog1: TOpenDialogLeft = 784Top = 312end
end

Delphi 用IdFtp控件实现ftp的全目录下载相关推荐

  1. delphi中利用Indy的TIdFtp控件实现FTP协议

    2019独角兽企业重金招聘Python工程师标准>>> delphi中利用Indy的TIdFtp控件实现FTP协议版权声明:本文为博主原创文章,未经博主允许不得转载.现在很多应用都需 ...

  2. Delphi XE2 新控件 布局Panel TGridPanel TFlowPanel

    Delphi XE2 新控件 Firemonkey 布局Panel Windows平台VCl TGridPanel TFlowPanel FMX 跨平台 TLayout TGridLayout TFl ...

  3. Delphi常用通讯控件的应用札记

    Delphi常用通讯控件的应用札记 1.SPComm串口控件 2.TClientSocket

  4. delphi中DateTimePicker控件同时输入日期和时间

    将DateTimePicker的Format属性中加入日期格式设成 'yyyy-MM-dd HH:mm',注意大小写 , 将kind设置为dtkTime即可,可以在每次Form onShow时将Dat ...

  5. Delphi利用MSCOMM控件进行GPS数据采集

    1.准备 GPS(Global Positioning System),即全球定位系统,利用GPS卫星的测距和测时功能进行全球定位,在许多系统中,如机场导航系统,出租车辆管理和调度系统.江河流域的灾害 ...

  6. delphi使用 第三方控件

    第三方控件安装时必须把所有的pas,dcu,dpk,res等文件复制到你的Lib目录下 然后通过dpk进行安装 安装后会多出来新的控件面板,新控件就在那里了 当然也有一些控件会安装到原有的面板上 比如 ...

  7. Delphi 7皮肤控件VCLSkin 5 60的使用

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! VCLS ...

  8. Delphi指针样式控件代码

    郑重感谢:本文代码来自Delphi盒子用户janker (janker),谢谢janker (janker)对Delphi社区做出的奉献!欢迎加入Delphi开发局QQ群:32422310  Delp ...

  9. delphi安装dpk控件

    现安装OmniXML控件,先将整个文件夹OmniXML拷贝至delphi7安装目录下(与bin文件夹平级),然后进Tools--Environment Options下,找到Library选项: 将路 ...

最新文章

  1. git ssh key创建和github使用
  2. linux+传输文件时卡住,linux - rsync 同步文件时卡住不动
  3. Python操作mysql数据库查询操作时提示“unread-result-found”
  4. 《Java基础入门》课后习题答案 资源分享
  5. Graph Embedding学习笔记(3):Graph Convolution Networks
  6. 前端之javaScript
  7. android studio gradle 打出jar,同时将依赖的第三方jar打包在一起
  8. maven 父maven_Maven的鸟瞰图
  9. pymol怎么做底物口袋表面_怎么从文献中发掘一篇新文章?
  10. 安装mlxtend_python机器学习包mlxtend的安装和配置详解
  11. AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
  12. python字符子串_子字符串和子序列(Python),子串,python
  13. linux网络编程--服务器模型(epoll/select/poll)
  14. Android 11源码下载和编译
  15. 软件测试培训一般多少钱?
  16. AutoCAD2007 打开缓慢解决方案
  17. 什么是边界扫描(boundary scan)?
  18. 计算机网络——SMTP
  19. html百度换皮肤,windows7系统下怎么给百度网页更换皮肤
  20. 性能测试和优化实录(mybatisplus异步写库@Async引起的对象无法释放问题)

热门文章

  1. 用好锚定效应可以事半功倍,避免锚定也可以减少成本。
  2. Spring中的IOC介绍
  3. git lfs的安装和使用
  4. python爬虫微信e校园签到,用Python爬虫的request方式实现自动签到!
  5. [uboot] (第五章)uboot流程——uboot启动流程
  6. 从零开始搭建自己的云服务器
  7. 搭建阿里云服务器的步骤
  8. 数据平台初试(产品篇)——短视频直播监测案例分享
  9. 33幅精美的拿铁图案摄影作品欣赏
  10. dlib人脸对齐(python)