| 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 |
| 好东西,支持. |
![]() |
|