TIdFTP组件在C++Builder里面如何实现续传啊????????

taoyi 2005-07-04 11:09:15
TIdFTP组件在C++Builder6里面如何实现续传啊????????

我看了一些DP下的代码,发现有些方法跟CB中的不一样,是不是CB的TIdFTP组件(版本是8.xxx)不支持续传啊??
...全文
417 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsl342 2006-03-06
  • 打赏
  • 举报
回复
断点续传需要服务器端和客户端两方面的配合。在服务器端,要支持REST n ,(n大于0)这个命令,而客户端则要负责计算出这个n的值。首先服务器端要给客户端list的权限,要不然客户端不知道远程服务器上有哪些文件,大小多少,就不可能计算出n;当客户端获得列表后,可以检测用户要上传的文件是否有同名,如果同名则可以检查大小是否一致,如果不一致,可以提示客户是重传还是续传或者放弃之类的。如果是续传,要先发出REST n这个命令,然后再发STORE命令,这个时候服务器会知道你是续传的,在相应的OnStoreFile响应函数的参数中AAppend就是true,否则就是false(这个AAppend可不是给你用来修改的,呵呵)。然后我们可以根据AAppend,以不同的方式创建一个文件流,续传的话OpenMode是fmOpenWrite,另外别忘了Seek(0, soFromEnd).
chenjun716 2005-11-02
  • 打赏
  • 举报
回复
把BCB6的Indy升级到9.0试了下。
能断点下载实现了。
但实现不了断点上传??

IdFTP1->Put(OpenDialog1->FileName,remotefile,true);
把AAppend参数设为true不起作用,
结果是把整个文件加到已传了一部分的文件上面??
constantine 2005-11-01
  • 打赏
  • 举报
回复
用IdFTP1->Size(serverfilename);只是判断用
真正实现的还是put,难道8.0的put不支持?
WiseNeuro 2005-10-31
  • 打赏
  • 举报
回复
学习
chenjun716 2005-10-30
  • 打赏
  • 举报
回复
我也在写这,在BCB6中的TIdFTP组件和DELPHI的是不一样,没有那个断点下载的参数?
大伙说说,在BCB中怎么实现断点下载呢?
上传倒是有一个参数,可通过比较两地文件的大小来进行。
还有就是怎么样判断FTP服务器上的某一文件存不存在?
本地的可用FileExists(localfilename)。
我是通过Temp = IdFTP1->Size(serverfilename);
if(Temp != -1)存在
if(Temp == -1)不存在
不知这种做法行不行?
shadowstar 2005-10-28
  • 打赏
  • 举报
回复
没有完全的断点上传,一般是让用户来判断是否断点上传,软件很难判断。
Sumel 2005-10-28
  • 打赏
  • 举报
回复
有Indy9.0吧,支持断点下载。断点上传好象不行。正在研究断点上传中。。。
cimgg 2005-10-28
  • 打赏
  • 举报
回复
indy9.0支持断点续传?能不能说的详细一点
constantine 2005-10-28
  • 打赏
  • 举报
回复
如果server支持,put的时候后面的参数AAppend控制一下就行 了
Delphi线程池实现多线程FTP分段下载组件 by :renshouren mail:114032666@qq.com 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 事件通知

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧