在delphi中用indy實現FTP上傳 下載的例子

         因爲delphi自己自帶了indy控件,所以用這些控件實現網絡編程即快又容易。儘管如此,我仍是極大地鼓勵本身查看FTP底層是如何實現的,但就目前而言,indy控件仍是一個很是不錯的選擇。
       針對indy的強大,我仍是決定將這段代碼帖出來,主要是方便本身往後複習、查詢。
Unit1;編程

interfacewindows

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
}orm

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();  //鏈接到ftpstring

  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.

相關文章
相關標籤/搜索