网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
利用Indy的TIdFtp控件实现FTP协议
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

const ASourceFile: string

将要被上传的文件

const ADestFile: string = ´´

服务器上的目标文件名

const AAppend: boolean = false

是否继续上传

 

代码示例:

  if IdFTP1.Connected then begin

    if UploadOpenDialog1.Execute then try

      IdFTP1.TransferType := ftBinary;

      IdFTP1.Put(UploadOpenDialog1.FileName, ExtractFileName(UploadOpenDialog1.FileName));

      //可以在此添加改变目录的代码;

    finally

      //完成清除工作

    end;

  end;

(7)删除的实现

    删除文件使用Delete方法,该方法删除指定的文件,删除对象必须为文件。如果要删除目录则使用RemoveDir方法。

过程说明:

procedure Delete(const AFilename: string);

删除文件

procedure RemoveDir(const ADirName: string);

删除文件夹,根据不同的服务器删除文件夹有不同的要求。有些服务器不允许删除非空文件夹,程序员需要添加清空目录的代码。

上述两个过程的参数均为目标名称

代码示例:

  if not IdFTP1.Connected then exit;

  Name := IdFTP1.DirectoryListing.Items[iCurrSelect].FileName;

  if IdFTP1.DirectoryListing.Items[iCurrSelect].ItemType = ditDirectory then try

    idftp1.RemoveDir(Name);

  finally

  end

  else

  try

    idftp1.Delete(Name);

  finally

  end;

(8)后退的实现

    后退在实际上是目录操作的一种,可以简单的改变当前目录为..来实现,也可以通过回到上级目录来实现。

(9)取消的实现

    在IdFtp的传输过程中,可以随时使用abort方法取消当前操作。可以的OnWork事件的实现中来确定何时取消操作。

代码示例:

//取消按钮的OnClick响应

procedure TMainForm.AbortButtonClick(Sender: TObject);

begin

  AbortTransfer := true;

end;

//IdFTP的OnWork事件响应

procedure TMainForm.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;

  const AWorkCount: Integer);

begin

 

  if AbortTransfer then IdFTP1.Abort;

  AbortTransfer := false;

end;

(10)断点续传的实现

    断点续传就是在上传或下载过程开始时,判断已经传输过的文件是否上传输完毕,如果传输没有成功完成,则在上次中断处继续进行传输工作。实现该功能需要两个重要的操作,首先是判断文件的大小信息,其次是在传输过程Get和Put中指定上传的行为。

    判断服务器上文件的大小使用函数Size(FileName)。在下载过程中,比较本地文件和远程文件的信息,然后在Get中指定AResume := True即可。而上传也一样,指定Put的AAppend := True就可以了。  

 

在前面我们讲过,Indy的网络操作大部分是阻塞模式的,TIdFtp也不例外。这样在上述各个操作运行过程的时候用户界面被暂时冻结,必须要等待调用返回才能继续用户操作界面响应。所以在实际编程中,需要使用多线程的方式来保证户界面的响应。Windows系统可以使用CreateThread系统调用来创建线程,但是在使用的时候需要开发人员做很多额外的工作来保证线程的同步等问题。而Indy中也包含了实现多线程的控件TIdThreadComponent,相对比之下该控件实现多线程时更加方便,也更容易控制。我将在后续的文章里为大家介绍TIdThreadCOmponent的使用方法。

作者的邮箱是:hubert@sina.com。

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号