delphi ftp上传下载

     由于delphi本身自带了indy控件,因此用这些控件实现网络编程即快又容易。尽管如此,我还是极大地鼓励自己查看FTP底层是如何实现的,但就目前而言,indy控件还是一个非常不错的选择。 
       针对indy的强大,我还是决定将这段代码帖出来,主要是方便自己日后复习、查询。 
Unit1;

interface

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, 
  IdTCPClient, IdFTP;

type 
  TForm1 = class(TForm) 
    IdFTP1: TIdFTP; 
    Button1: TButton; 
    Memo1: TMemo; 
    Edit1: TEdit; 
    Button2: TButton; 
    Label1: TLabel; 
    Button3: TButton; 
    OpenDialog1: TOpenDialog; 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure Button3Click(Sender: TObject); 
    procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus; 
      const AStatusText: String); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end;

var 
  Form1: TForm1;

implementation 
uses IdFTPList, IdFTPCommon; 
{$R *.dfm} 

 本程序是一个ftp  demo程序,我用windows信息服务在本机建立了一个ftp服务, 
 本机IP:192.168.10.99 
 用户名:cc 
 密码:1 
}

procedure TForm1.Button1Click(Sender: TObject); 
var 
  tr : Tstrings; 
begin  //连接 
  tr := TStringlist.Create; 
  IdFTP1.Host := '192.168.10.99'; //FTP服务器IP地址or域名也可以 
  IdFTP1.Username := 'username'; //FTP服务器用户名 
  IdFTP1.Password := 'password'; //FTP服务器密码

  IdFTP1.Connect();  //连接到ftp

  Edit1.Text := IdFTP1.RetrieveCurrentDir;//得到初始目录 
  IdFTP1.ChangeDir('client'); //进入到client子目录 
  //IdFTP1.ChangeDir('..'); //回到上一级目录 
  IdFTP1.List(tr); //得到client目录下所有文件列表 
  Memo1.Lines.Assign(tr); 
  tr.Free; 
end;

procedure TForm1.Button2Click(Sender: TObject); 
var 
  tt :TIdFTPListItems; 
  t : TIdFTPListItem; 
  i : integer; 
  tfname : String; 
begin  //下载 
  Label1.Caption := IdFTP1.DirectoryListing.Items[0].FileName; 
  IdFTP1.TransferType := ftBinary; //指定为二进制文件  或文本文件ftASCII 
  for i:=0 to IdFTP1.DirectoryListing.Count-1 do 
  begin 
    tt := IdFTP1.DirectoryListing; //得到当前目录下文件及目录列表 
    t := tt.Items[i]; //得到一个文件相关信息 
    Label1.Caption :=t.Text;  //取出一个文件信息内容 
    tfname := t.FileName; 
    showmessage(t.OwnerName+'  '+t.GroupName+'  '+t.FileName+'   '+t.LinkedItemName); 
    if IdFTP1.DirectoryListing.Items[i].ItemType = ditFile then //如果是文件 
    begin 
      IdFTP1.Get(tfname,'d:\FTPtest\'+tfname,True,True); //下载到本地,并为覆盖,且支持断点续传 
    end; 
  end; 
end;

procedure TForm1.Button3Click(Sender: TObject); 
var 
  fi : string; 
begin  //上传 
  if OpenDialog1.Execute then 
  begin 
     fi := OpenDialog1.FileName; 
    IdFTP1.Put('f:\测试文档样本.rar','测试文档样本.rar');//上传, 
  end; 
end;

procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus; 
  const AStatusText: String); 
begin 
  {case  AStatus of 
    hsResolving  : showmessage('hsResolving'); 
    hsConnecting: showmessage('hsConnecting'); 
    hsConnected: showmessage('hsConnected'); 
    hsDisconnecting: showmessage('hsDisconnecting'); 
    hsDisconnected: showmessage('hsDisconnected'); 
    hsStatusText: showmessage('hsStatusText');  
    ftpTransfer: showmessage('文件传送完毕。'); 
    ftpReady: showmessage('准备传送文件....'); 
    ftpAborted: showmessage('传送失败'); 
  end;         }

  //showmessage(AStatusText); 
end;

end.

posted @ 2017-10-15 19:53  夏天的西瓜君  阅读(424)  评论(0编辑  收藏  举报