首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于文件流的有关问题

2012-06-16 
关于文件流的问题Delphi(Pascal) codevarfs: TFileStreamiFileSize:integerbeginfs : TFileStream.Crea

关于文件流的问题

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
[解决办法]
传送过去的文件大小可知。续传的时候定位到原传送文件应该开始的位置,开始续传

热点排行