1、“先获取服务器文件的大小,把本地文件流指向该位置,然后用Put方法并把Append设置为true。” - 我估计他压根就没实验过,文件还是会直接整个附加在上次传的后面的。本地FileStream的位置指定不起任何作用。
2、“设法修改idFTP单元,让它支持断点续传。” - 我觉得没把握,切勿轻易修改VCL的自带单元,尤其是暂处于初心者阶段的朋友。不过就算改出来了,以后重装DELPHI后,还得再次覆盖该单元。且对于公 司项目来说,如果接你手的人不知道你改了VCL源代码,那后果是很严重的。所以,如果有其它更好的方法,我建议最好不这样做。
3、“直接用FTP指令进行交互。” - 除非你很熟悉FTP协议了,我觉得一般人可能不会这样的方法。
转入正题,其实我们只要结合一个MemoryStream,就可以轻松实现断点续传了。代码如下:
代码很简单,不说了,主要就是把续传部分分块读进一个临时的MemoryStream中。这样做不但让Put方法中的Append参数真正发挥其作用, 而且线程停止的时候,也可以随时把上传停下来。注意千万不要把续传部分一次过读进MemoryStream里,当你续传一个1G的文件时,可能你立刻就会 后悔的哦。