关于文件流的问题
- Delphi(Pascal) code
varfs: 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左右的文件需要多久
[解决办法]
先用Seek取得目标文件大小,然后用CopyFrom复制要上传的包大小到新的MemoryStream中,再Put
[解决办法]
传送过去的文件大小可知。续传的时候定位到原传送文件应该开始的位置,开始续传