unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdFTP; type TForm1 = class(TForm) IdFTP1: TIdFTP; dlgOpen1: TOpenDialog; btn1: TButton; mmo1: TMemo; btn2: TButton; btn3: TButton; edt1: TEdit; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); procedure btn3Click(Sender: TObject); procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: String); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses IdFTPList, IdFTPCommon; //這個上傳和下載 是 純用 idftp 客戶端 來達到 下載和上傳的功能, 沒有寫到ftp服務端的東西 { 本程序是一個ftp demo程序,我用windows信息服務在本機建立了一個ftp服務, 本機IP:192.168.10.99 用戶名:cc my 密碼:1 qwert } procedure TForm1.btn1Click(Sender: TObject); var tr : Tstrings; begin //連接 tr := TStringlist.Create; //IdFTP1.Host := '192.168.10.99'; //FTP服務器地址 IdFTP1.Host := '127.0.0.1'; //FTP服務器地址 IdFTP1.Port:= 2121; //注意端口號,這里不是默認的21,而是你自己設定的值 IdFTP1.Username := 'my'; //FTP服務器用戶名 IdFTP1.Password := 'qwert'; //FTP服務器密碼 IdFTP1.Connect(); //連接到ftp edt1.Text := IdFTP1.RetrieveCurrentDir;//得到初始目錄 //IdFTP1.ChangeDir('client'); //進入到client子目錄 //IdFTP1.ChangeDir('..'); //回到上一級目錄 IdFTP1.List(tr); //得到client目錄下所有文件列表 mmo1.Lines.Assign(tr); tr.Free; end; procedure TForm1.btn2Click(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,ExtractFilePath(Application.ExeName)+tfname,True,True); //下載到本地,並為覆蓋,且支持斷點續傳 end; end; end; procedure TForm1.btn3Click(Sender: TObject); var fi : string; begin //上傳 if dlgOpen1.Execute then begin fi := dlgOpen1.FileName; //IdFTP1.Put('f:/測試文檔樣本.rar','測試文檔樣本.rar');//上傳, IdFTP1.Put(fi,ExtractFileName(fi)); 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.