用delphi实现ftp多线程下载源代码(转载)

//接收文件
function TForm1.GetURLFileName(aURL: string): string;
var
i: integer;
s: string;
begin //返回下载地址的文件名
s := aURL;
i := Pos('/', s);
while i <> 0 do //去掉"/"前面的内容剩下的就是文件名了
begin
Delete(s, 1, i);
i := Pos('/', s);
end;
Result := s;
end;

//得到文件大小
function TForm1.GetFileSize(aURL: string): integer;
var
FileSize : integer;
tStream: TFileStream;
FileName: String;
begin
//tStream.size := 0;
IdFTP1.StructureMount(aURL);********************************不知道用的对不对?
//FileSize := IdFTP1.Response.ContentLength;
FileSize := IdFTP1.size(FileName);
//FileSize := IdFTP1.ContentLength(FileName);
IdFTP1.Abort;
Result := FileSize;

end;


//多线程下载
procedure TForm1.Button11Click(Sender: TObject);
var
m:integer;
begin

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi线程池实现多线程FTP分段下载组件 by :renshouren mail:[email protected] QQ:114032666 2019.10.05 使用的组件 1、TIdFTP Indy FTP客户端 2、TThreadsPool 线程池 工作原理及流程 调用本单元,将自动在程序初始化时生成线程池TThreadPoolDown实例 Share_ThreadPool_FTPDown 一、外部调用方法 外部只需要一次性调用 FtpDown() 函数向线程池加入下载任务,下载任务执行中的事件会通过调用时注册的 回调函数 AFtpDownEvent 进行通知。 二、内部工作流程 1、FtpDown()函数将调用TThreadPoolDown.AddFtpDown() ,然后调用TADownFileObj.MakeGetFileSizeObj()分配线程任务 本过程中,将向回调函数 AFtpDownEvent 触发 HEM_ADDURL 事件通知 2、工作线程调用任务对象TFTPHeadObj.DoThreadExecute 过程获取远程文件大小 备注:该功能实际使用到FTP命令SIZE,该命令一些老版本FTP服务器有可能不支持 本过程中,若获取文件大小成功,将向回调函数 AFtpDownEvent 触发 HEM_GETSIZE 事件通知, 若失败,则触发 HEM_ERROR 事件通知 3、得到远程文件大小后,调用TADownFileObj.MakeGetObjs(),分配获取远程文件线程任务 本过程中,开始时,将向回调函数 AFtpDownEvent 触发 HEM_WORKBEGIN 事件通知 在接收数据时,向回调函数 AFtpDownEvent 触发 HEM_WORK 事件通知 4、工作线程调用任务对象 TFTPGetObj.DoThreadExecute 实际下载远程文件数据块 每一个数据块下载任务完成后,触发 HEM_BLOCKOK 事件通知 5、所有数据块完成后,将调用 DoDownloadOK 函数,触发 HEM_DOWNOK 事件通知
Delphi是一种编程语言,也是一个集成开发环境(IDE),它被广泛用于开发Windows平台下的应用程序。多线程下载是指在一个程序中同时使用多个线程来下载文件。 在Delphi实现多线程下载可以通过以下步骤: 1. 创建一个主线程:主线程负责用户界面的操作和与用户的交互。 2. 创建多个工作线程:工作线程负责文件的下载和传输。 3. 在主线程中设置下载任务:用户输入下载链接或选择文件后,主线程将下载任务分配给工作线程。 4. 在工作线程中实现文件的下载:每个工作线程根据主线程分配的任务,使用网络库或HTTP组件进行文件的下载。 5. 使用同步机制管理多个线程之间的协调:使用Delphi提供的同步机制,例如临界区、信号量或事件,来确保多个线程之间的协调和同步。 6. 在主线程中更新下载进度:主线程通过接收工作线程的进度信息,实时更新下载进度条或显示下载百分比。 7. 处理下载完成事件:当文件下载完成后,工作线程将发送一个下载完成的事件给主线程,并进行善后处理,如保存文件和关闭相应的线程。 在多线程下载过程中,需要注意以下几点: 1. 线程安全:确保多个线程同时访问共享资源时不会引发竞态条件或数据冲突。 2. 错误处理:在下载过程中可能会出现网络连接中断、文件不存在等异常情况,需要在代码中进行适当的错误处理。 3. 资源管理:在下载完成后,要及时释放相关资源,以免造成内存泄漏或资源浪费。 综上所述,Delphi可以通过创建多个工作线程来实现多线程下载,通过合理的线程协调和同步机制,可以提高下载效率和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值