Delphi 用IdFtp控件实现ftp的全目录下载
首先是在本机上建立一个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的全目录下载相关推荐
- delphi中利用Indy的TIdFtp控件实现FTP协议
2019独角兽企业重金招聘Python工程师标准>>> delphi中利用Indy的TIdFtp控件实现FTP协议版权声明:本文为博主原创文章,未经博主允许不得转载.现在很多应用都需 ...
- Delphi XE2 新控件 布局Panel TGridPanel TFlowPanel
Delphi XE2 新控件 Firemonkey 布局Panel Windows平台VCl TGridPanel TFlowPanel FMX 跨平台 TLayout TGridLayout TFl ...
- Delphi常用通讯控件的应用札记
Delphi常用通讯控件的应用札记 1.SPComm串口控件 2.TClientSocket
- delphi中DateTimePicker控件同时输入日期和时间
将DateTimePicker的Format属性中加入日期格式设成 'yyyy-MM-dd HH:mm',注意大小写 , 将kind设置为dtkTime即可,可以在每次Form onShow时将Dat ...
- Delphi利用MSCOMM控件进行GPS数据采集
1.准备 GPS(Global Positioning System),即全球定位系统,利用GPS卫星的测距和测时功能进行全球定位,在许多系统中,如机场导航系统,出租车辆管理和调度系统.江河流域的灾害 ...
- delphi使用 第三方控件
第三方控件安装时必须把所有的pas,dcu,dpk,res等文件复制到你的Lib目录下 然后通过dpk进行安装 安装后会多出来新的控件面板,新控件就在那里了 当然也有一些控件会安装到原有的面板上 比如 ...
- Delphi 7皮肤控件VCLSkin 5 60的使用
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! VCLS ...
- Delphi指针样式控件代码
郑重感谢:本文代码来自Delphi盒子用户janker (janker),谢谢janker (janker)对Delphi社区做出的奉献!欢迎加入Delphi开发局QQ群:32422310 Delp ...
- delphi安装dpk控件
现安装OmniXML控件,先将整个文件夹OmniXML拷贝至delphi7安装目录下(与bin文件夹平级),然后进Tools--Environment Options下,找到Library选项: 将路 ...
最新文章
- git ssh key创建和github使用
- linux+传输文件时卡住,linux - rsync 同步文件时卡住不动
- Python操作mysql数据库查询操作时提示“unread-result-found”
- 《Java基础入门》课后习题答案 资源分享
- Graph Embedding学习笔记(3):Graph Convolution Networks
- 前端之javaScript
- android studio gradle 打出jar,同时将依赖的第三方jar打包在一起
- maven 父maven_Maven的鸟瞰图
- pymol怎么做底物口袋表面_怎么从文献中发掘一篇新文章?
- 安装mlxtend_python机器学习包mlxtend的安装和配置详解
- AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
- python字符子串_子字符串和子序列(Python),子串,python
- linux网络编程--服务器模型(epoll/select/poll)
- Android 11源码下载和编译
- 软件测试培训一般多少钱?
- AutoCAD2007 打开缓慢解决方案
- 什么是边界扫描(boundary scan)?
- 计算机网络——SMTP
- html百度换皮肤,windows7系统下怎么给百度网页更换皮肤
- 性能测试和优化实录(mybatisplus异步写库@Async引起的对象无法释放问题)