用delphi 7 实现的一个简易 FTP 软件

在做网站的时候,少不了用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 客户端.

连接和断开

程序代码 程序代码

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;


下载文件
程序代码 程序代码

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

除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 yihaomen 于 2015-09-08 09:59 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: delphi ftp
相关日志:
评论: 32 | 引用: 0 | 查看次数: -
回复回复楠木头[2015-09-06 06:07 PM | del]
老师··看到了麻烦发一份学习,348956734@qq.com  十分感谢
回复来自 yihaomen 的评论 yihaomen 于 2015-09-08 09:58 PM 回复
http://www.yihaomen.com/article/myproduct/596.htm 这里去下载吧。
回复回复ftp[2015-08-19 12:21 AM | del]
请给我也发一份谢谢14324073@qq.com
回复回复hadis1023[2015-05-26 09:31 PM | del]
请老师也给我发一份原码,一定对我有不小的帮助。邮箱:jl1023@sina.com,我用IDFTP只要中文就乱码,期待您的指导,谢谢!
回复回复wujf[2015-05-07 11:12 AM | del]
老师你好
正学习delphi ,给我也发一份吧,先谢过老师您了。
970216138@qq.com
回复回复lanlan[2015-04-16 09:20 AM | del]
老师,我需要份源代码,邮箱89019474@qq.com
回复回复少女荷[2015-04-13 08:50 PM | del]
375984044@qq.com 麻烦看到后发一下好吗 万分感谢
回复来自 yihaomen 的评论 yihaomen 于 2015-04-14 04:54 PM 回复
已经发送了,注意查收邮件.
回复回复网事如烟[2015-02-05 02:26 PM | del]
帮忙发一份源码,谢谢!1121962190@QQ.com
回复回复kaluka[2014-12-29 03:25 PM | del]
老师,能否发一份源代码?需要您!m_m9@qq.com。谢谢!:)
回复回复xueshan[2014-12-19 10:02 AM | del]
老师:
我刚接手一个delphi7 的软件的维护工作,需要一份上传下载代码,给我发一份吧,我的邮箱是yuan12888@163.com,谢谢!
回复回复zy[2014-12-14 10:58 PM | del]
老师:偶需要一份源码。邮箱:909332700@qq.com
我用IDFtp链接一直有socket error 10053的错误,不知何故
回复来自 yihaomen 的评论 yihaomen 于 2014-12-15 12:38 AM 回复
已经发送了。
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.