用delphi 7 实现的一个简易 FTP 软件
By:Roy.LiuLast updated:2012-08-24
在做网站的时候,少不了用FTP,我们通常会用 flashxp. FileZilla,cuteftp,8uftp 等等。难道FTP 就仅仅适用于做网站吗?不是的,FTP 是文件传输协议。涉及到文件传输的系统,都可以用FTP来实现,关键是看具体的项目是不是适合用FTP来解决。
像网站这种系统,就适合用FTP,但如果是对系统要求比较高,在传输文件的时候,还要做其它处理等。甚至可能直接用底层的SOCKET用流得方式传文件,更好的自己控制,扩展。当然FTP 也是基于TCP/IP SOCKET 实现的。
上面提到的是使用人家的FTP软件。但有的项目需要自己集成FTP客户端来实现文件的上传下载。集成的好处是:
1.有较好的用户体验。用户在一个系统中完成所有的事情,不需要切换。
2.集成的FTP客户端,自己控制,利于扩展。
用DELPHI7 如何打造一个自己需要的FTP客户端呢。其实有indy组件:里面有TidFTP component. 直接可以实现 FTP 客户端.
[B]连接和断开[/B]
上传文件
[B]下载文件[/B]
上面列出了常用的核心方法。当然还有改变目录等,这些处理起来,也就比较简单了。
在DELPHI7 IDE 中样式截图;
编译项目后运行。结果图如下:
可执行文件下载测试:
点击下载此文件
如果有需要源代码的,可以留言,留下Email,其实上面已经将核心代码贴出大部分了。
要源码的比较多,干脆放出来了,这里下载: http://www.yihaomen.com/article/myproduct/596.htm
像网站这种系统,就适合用FTP,但如果是对系统要求比较高,在传输文件的时候,还要做其它处理等。甚至可能直接用底层的SOCKET用流得方式传文件,更好的自己控制,扩展。当然FTP 也是基于TCP/IP SOCKET 实现的。
上面提到的是使用人家的FTP软件。但有的项目需要自己集成FTP客户端来实现文件的上传下载。集成的好处是:
1.有较好的用户体验。用户在一个系统中完成所有的事情,不需要切换。
2.集成的FTP客户端,自己控制,利于扩展。
用DELPHI7 如何打造一个自己需要的FTP客户端呢。其实有indy组件:里面有TidFTP component. 直接可以实现 FTP 客户端.
[B]连接和断开[/B]
procedure TfrmFtp.ConnectButtonClick(Sender: TObject); begin ConnectButton.Enabled := false; if IdFTP1.Connected then try if TransferrignData then IdFTP1.Abort; IdFTP1.Quit; finally CurrentDirEdit.Text := '/'; DirectoryListBox.Items.Clear; SetFunctionButtons(false); ConnectButton.Caption := '连接(&c)'; ConnectButton.Enabled := true; ConnectButton.Default := true; end else with IdFTP1 do try Username := UserIDEdit.Text; Password := PasswordEdit.Text; Host := FtpServerEdit.Text; Connect; Self.ChageDir(CurrentDirEdit.Text); SetFunctionButtons(true); SaveFTPHostInfo(FtpServerEdit.Text, 'FTPHOST'); finally ConnectButton.Enabled := true; if Connected then begin ConnectButton.Caption := '断开(&D)'; ConnectButton.Default := false; end; end; end;
上传文件
procedure TfrmFtp.UploadButtonClick(Sender: TObject); begin if IdFTP1.Connected then begin if UploadOpenDialog1.Execute then try SetFunctionButtons(false); try IdFTP1.TransferType := ftBinary; IdFTP1.Put(UploadOpenDialog1.FileName, ExtractFileName(UploadOpenDialog1.FileName)); ChageDir(idftp1.RetrieveCurrentDir); except showmessage('上传错误'); end; finally SetFunctionButtons(true); end; end; end;
[B]下载文件[/B]
procedure TfrmFtp.DirectoryListBoxDblClick(Sender: TObject); Var Name{, Line}: String; begin if not IdFTP1.Connected then exit; //Line := DirectoryListBox.Items[DirectoryListBox.ItemIndex]; Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName; if IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].ItemType = ditDirectory then begin // Change directory SetFunctionButtons(false); ChageDir(Name); SetFunctionButtons(true); end else begin try SaveDialog1.FileName := Name; if SaveDialog1.Execute then begin SetFunctionButtons(false); IdFTP1.TransferType := ftBinary; BytesToTransfer := IdFTP1.Size(Name); if FileExists(Name) then begin // case MessageDlg('File aready exists. Do you want to resume the download operation?', case MessageDlg('文件巳经存在. 你是否想更改文件件名进行下载操作?', mtConfirmation, mbYesNoCancel, 0) of mrYes: begin BytesToTransfer := BytesToTransfer - FileSizeByName(Name); IdFTP1.Get(Name, SaveDialog1.FileName, false, true); end; mrNo: begin IdFTP1.Get(Name, SaveDialog1.FileName, true); end; mrCancel: begin exit; end; end; end else begin IdFTP1.Get(Name, SaveDialog1.FileName, false); end; end; finally SetFunctionButtons(true); end; end; end;
上面列出了常用的核心方法。当然还有改变目录等,这些处理起来,也就比较简单了。
在DELPHI7 IDE 中样式截图;
编译项目后运行。结果图如下:
可执行文件下载测试:
点击下载此文件
如果有需要源代码的,可以留言,留下Email,其实上面已经将核心代码贴出大部分了。
要源码的比较多,干脆放出来了,这里下载: http://www.yihaomen.com/article/myproduct/596.htm
From:一号门
Previous:Django Form 自定义试用笔记(附工程源码下载)
COMMENTS