Delphi 7 內建 NMFP (NetMasters FTP) 元件位於 FastNet 頁,封裝 FTP 協定,支援連線、上傳、下載、列表、中止等操作。Delphi 7 後 Borland 停止預設安裝,需手動註冊 FastNet 套件。
NMFP1:FTP 核心元件Edit1/2/3:UserID, Password, HostButton1:連線Button2:上傳Button3:中止Button4:離開Button5:重新整理列表OpenDialog1:選檔Memo1:遠端檔案列表Label5:顯示本地檔案路徑
procedure TForm1.Button1Click(Sender: TObject);
begin
NMFTP1.Host := Edit3.Text;
NMFTP1.UserID := Edit1.Text;
NMFTP1.Password := Edit2.Text;
NMFTP1.Connect;
end;
procedure TForm1.Button2Click(Sender: TObject);
var S: string;
begin
S := Label5.Caption; // 本地檔案完整路徑
if S <> '' then
NMFTP1.Upload(S, ''); // 遠端路徑空 = 當前目錄同檔名
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
NMFTP1.Abort;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Memo1.Lines.Clear;
NMFTP1.NList; // 觸發 OnListItem 事件
end;
procedure TForm1.NMFTP1ListItem(Listing: String);
begin
Memo1.Lines.Add(Listing);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Label5.Caption := OpenDialog1.FileName;
end;
NMFTP 採非同步事件模型:
OnConnect:連線成功/失敗OnDisconnect:斷線OnProgress:傳輸進度 (bytes sent)OnListItem:目錄列表每一行OnSuccess / OnFailure:命令完成狀態建議在這些事件中更新 UI (進度條、狀態列)、記錄日誌、錯誤處理。
object NMFTP1: TNMFTP
OnListItem = NMFTP1ListItem
// 其他事件視需求綁定
end
| 方案 | 優點 | 缺點 |
|---|---|---|
| Indy (TIdFTP) | 內建、開源、跨平台、支援 FTPS/SFTP (配合 OpenSSL) | API 與 NMFTP 差異大,需重寫 |
| Ics (TftpClient) | 輕量、非阻塞、支援 TLS | 第三方套件 |
| 手動安裝 FastNet | 代碼零修改 | 不再維護、無安全更新、64 位相容性差 |
強烈建議:新專案直接使用 Indy TIdFTP,功能更完整、社群活躍、支援現代加密協定。
uses IdFTP, IdGlobal;
var FTP: TIdFTP;
begin
FTP := TIdFTP.Create(nil);
try
FTP.Host := 'ftp.example.com';
FTP.Username := 'user';
FTP.Password := 'pass';
FTP.Connect;
try
FTP.Put('C:\Local\File.txt', 'Remote/File.txt'); // 上傳
// FTP.Get('Remote/File.txt', 'C:\Local\File.txt'); // 下載
finally
FTP.Disconnect;
end;
finally
FTP.Free;
end;
end;
NMFTP 曾是 Delphi 快速開發 FTP 工具的利器,但已屬過時技術。本文提供完整 NMFTP 實現參考,並指引遷移至 Indy 等現代庫的最佳路徑。