var
fs: TFileStream;iFileSize:integer;
begin
fs := TFileStream.Create('C:\测试.ISO', fmOpenRead);
IdFTP := TIdFTP.Create(nil);
IdFTP.Host := '192.168.2.230';
IdFTP.Port := 21;
IdFTP.Username := 'admin';
IdFTP.Password := '123456';
IdFTP.Connect();
iFileSize := IdFTP.Size('test.cdr'); if iFileSize = -1 then //文件不存在
begin
idftp.Put(fs,'test.cdr');
end
else if fs.Size <= iFileSize then
begin
//文件已经存在
end
else
begin //文件不完整,断点续传
fs.Position := iFileSize;
IdFTP.Put(fs, 'test.cdr', true);//最后一个参数就是打开Append,续传方式
end;
end;这个代码是网上找的 说是设置filestream的position就可以实现断点续传
但是设置之后,确实是续传了,不过是把整个文件续传了
比如文件大小是100K 第一次传了50K 第二次传的时候从服务器文件的50K开始,一共续传100K,最后就成150K了我估计是那个人没有做测试,现在的思路是先把filestream里的文件流从iFileSize处开始复制一份到结束,然后建立一个新的filestream2,把filestream2续传上去就好了目前的问题有
filestream对象会把文件内容加载到内存中吗,对filestream操作是操作硬盘还是内存
还有就是如何将filestream的一部分复制到filestrem2中
复制时需要设置缓存吗,如何设置,复制一个2G左右的文件需要多久
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货