捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:《80例上手Delphi7编程》之“断点续传”
zizii 10248 2004/12/6 20:57:04
hhero说的我现在也认同,size和position的区别就是size是实际大小,position确是从0开始而不是1开始,所以size-1就是position的结束。
可能我当时钻牛角尖去了,不够冷静。
dltjy 10246 2004/12/6 20:41:03
thanks
hhero 10245 2004/12/6 20:36:07
这里我们同样使用IdHTTP的Get过程,函数的aURL是网址,aFile是保存的文件名,bResume确定是否续传,需要注意的就是续传方式时的代码:
    IdHTTP1.Request.ContentRangeStart := tStream.Size - 1;
    tStream.Position := tStream.Size - 1; //移动到最后继续下载
    IdHTTP1.Head(aURL);
    IdHTTP1.Request.ContentRangeEnd := IdHTTP1.Response.ContentLength;
第一行我们将下载开始位置设置为读入文件流的末尾,也就是设置为已经下载了的那部分文件的大小,第二行我们将文件流本身也指向自己的末尾,第三行我们通过Head过程得到网址头信息,在第四行将头信息的文件总大小赋值给下载的结束的位置,至于这里为什么第一行和第二行代码最后都要-1,我当时没有加-1的时候在续下载一个完整的已经下载的文件的时候总是提示错误,最后跟踪IdHTTP的代码发现他在处理下载范围的时候如果开始的位置和结束位置一样时会引发将浮点数转为整数的错误,因而这里加上-1防止这种错误发生,另外一种处理方法就是比较如果开始位置等于结束位置就退出也是可以的。

对这段代码的解释我觉得可以商榷。
首先这段代码的写法是正确的,但笔者的解释我觉得有点牵强。
为什么要-1,个人认为是由于一个文件的偏移是从0位置算起的,比如一个1000K的文件,应该是从0-999,因此在计算position的时候要用SIZE-1。
不知道是不是正确,请笔者指教。
tim001 10227 2004/12/6 14:07:53
不如全部打包上来
bianfuxia888888 10224 2004/12/6 13:09:11
好东西,非常值得学习
webfly 10220 2004/12/6 12:31:11
正需要这个东西哪!
hanaijun 10215 2004/12/6 9:45:51
学习学习!! 支持!
sonic888 10211 2004/12/6 8:11:42
支持一下
marron 10208 2004/12/5 23:28:02
不错
w3k 10204 2004/12/5 21:17:53
真是好东西啊!谢谢站长
sohy 10195 2004/12/5 20:20:34
好东西,支持.
第一页 上一页 下一页 最后页 有 31 条纪录 共2页 21 - 31
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表