Loading... 以前总认为FTP程序实现很困难,但后来在网上查看了相关的帖子后发现原来用delphi实现FTP上传与下载竟如此容易,确实对我鼓舞很大。<br /> 由于delphi本身自带了indy控件,因此用这些控件实现网络编程即快又容易。尽管如此,我还是极大地鼓励自己查看FTP底层是如何实现的,但就目前而言,indy控件还是一个非常不错的选择。<br /> 针对indy的强大,我还是决定将这段代码帖出来,主要是方便自己日后复习、查询。<p>Unit1;</p><p>interface</p><p>uses<br /> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br /> Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,<br /> IdTCPClient, IdFTP;</p><p>type<br /> TForm1 = class(TForm)<br /> IdFTP1: TIdFTP;<br /> Button1: TButton;<br /> Memo1: TMemo;<br /> Edit1: TEdit;<br /> Button2: TButton;<br /> Label1: TLabel;<br /> Button3: TButton;<br /> OpenDialog1: TOpenDialog;<br /> procedure Button1Click(Sender: TObject);<br /> procedure Button2Click(Sender: TObject);<br /> procedure Button3Click(Sender: TObject);<br /> procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;<br /> const AStatusText: String);<br /> private<br /> { Private declarations }<br /> public<br /> { Public declarations }<br /> end;</p><p>var<br /> Form1: TForm1;</p><p>implementation<br />uses IdFTPList, IdFTPCommon;<br />{$R *.dfm}<br />{<br /> 本程序是一个ftp demo程序,我用windows信息服务在本机建立了一个ftp服务,<br /> 本机IP:192.168.10.99<br /> 用户名:cc<br /> 密码:1<br />}</p><p><br />procedure TForm1.Button1Click(Sender: TObject);<br />var<br /> tr : Tstrings;<br />begin //连接<br /> tr := TStringlist.Create;<br /> IdFTP1.Host := '192.168.10.99'; //FTP服务器地址<br /> IdFTP1.Username := 'cc'; //FTP服务器用户名<br /> IdFTP1.Password := '1'; //FTP服务器密码</p><p> IdFTP1.Connect(); //连接到ftp</p><p> Edit1.Text := IdFTP1.RetrieveCurrentDir;//得到初始目录<br /> IdFTP1.ChangeDir('client'); //进入到client子目录<br /> //IdFTP1.ChangeDir('..'); //回到上一级目录<br /> IdFTP1.List(tr); //得到client目录下所有文件列表<br /> Memo1.Lines.Assign(tr);<br /> tr.Free;<br />end;</p><p>procedure TForm1.Button2Click(Sender: TObject);<br />var<br /> tt :TIdFTPListItems;<br /> t : TIdFTPListItem;<br /> i : integer;<br /> tfname : String;<br />begin //下载<br /> Label1.Caption := IdFTP1.DirectoryListing.Items[0].FileName;<br /> IdFTP1.TransferType := ftBinary; //指定为二进制文件 或文本文件ftASCII<br /> for i:=0 to IdFTP1.DirectoryListing.Count-1 do<br /> begin<br /> tt := IdFTP1.DirectoryListing; //得到当前目录下文件及目录列表<br /> t := tt.Items[i]; //得到一个文件相关信息<br /> Label1.Caption :=t.Text; //取出一个文件信息内容<br /> tfname := t.FileName;<br /> showmessage(t.OwnerName+' '+t.GroupName+' '+t.FileName+' '+t.LinkedItemName);<br /> if IdFTP1.DirectoryListing.Items[i].ItemType = ditFile then //如果是文件<br /> begin<br /> IdFTP1.Get(tfname,'d:\FTPtest\'+tfname,True,True); //下载到本地,并为覆盖,且支持断点续传<br /> end;<br /> end;<br />end;</p><p>procedure TForm1.Button3Click(Sender: TObject);<br />var<br /> fi : string;<br />begin //上传<br /> if OpenDialog1.Execute then<br /> begin<br /> fi := OpenDialog1.FileName;<br /> IdFTP1.Put('f:\测试文档样本.rar','测试文档样本.rar');//上传,<br /> end;<br />end;</p><p>procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;<br /> const AStatusText: String);<br />begin<br /> {case AStatus of<br /> hsResolving : showmessage('hsResolving');<br /> hsConnecting: showmessage('hsConnecting');<br /> hsConnected: showmessage('hsConnected');<br /> hsDisconnecting: showmessage('hsDisconnecting');<br /> hsDisconnected: showmessage('hsDisconnected');<br /> hsStatusText: showmessage('hsStatusText'); <br /> ftpTransfer: showmessage('文件传送完毕。');<br /> ftpReady: showmessage('准备传送文件....');<br /> ftpAborted: showmessage('传送失败');<br /> end; }</p><p> //showmessage(AStatusText);<br />end;</p><p>end.<br />来源: <a href="https://www.samool.com/go/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFwXzUyOC9hcmNoaXZlLzIwMDYvMDYvMDkvNzgzMTQ5LmFzcHg=" target="_blank" >http://blog.csdn.net/qqp_528/archive/2006/06/09/783149.aspx</a></p> 相关文章 无相关文章 Last modification:August 16th, 2009 at 12:30 pm © 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏 ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat
很好 能发个图吗