delphi – tfilestream.seek和偏移混淆
发布时间:2020-12-15 09:37:41 所属栏目:大数据 来源:网络整理
导读:这是从 https://forums.embarcadero.com/message.jspa?messageID=219481获取的代码段 if FileExists(dstFile) thenbegin Fs := TFileStream.Create(dstFile,fmOpenReadWrite); try Fs.Seek(Max(0,Fs.Size-1024),soFromBeginning); // alternatively: // Fs.S
这是从
https://forums.embarcadero.com/message.jspa?messageID=219481获取的代码段
if FileExists(dstFile) then begin Fs := TFileStream.Create(dstFile,fmOpenReadWrite); try Fs.Seek(Max(0,Fs.Size-1024),soFromBeginning); // alternatively: // Fs.Seek(-1024,soFromEnd); Http.Request.Range := IntToStr(Fs.Position) + '-'; Http.Get(Url,Fs); finally Fs.Free; end; end; 我不明白究竟是什么偏移和 // alternatively: // Fs.Seek(-1024,soFromEnd); 到底是什么’-1024’…为什么总是使用1024 / -1024? 如果重要:我使用d2007和d2010 解决方法
由于这是试图创建一个可以停止和恢复下载的下载管理器,这里的想法是,当你恢复时,它想要退一步并重新请求以前发送的一些数据,以防断开连接是由导致收到的数据损坏的错误引起的.我见过的大多数下载管理器都会退回至少4 KB;看起来这个只做1 KB.
如果你将fs.Size单独放在占位符中,那么它根本不会退回,这可能会让你对数据损坏的可能性开放. 用TMemoryStream替换TFileStream意味着你要下载到RAM而不是光盘,如果计算机崩溃或断电或者你的应用程序以某种方式崩溃,所有进度都会丢失.所以这不是一个好主意.此外,下载到RAM会将下载的大小限制为地址空间的可用大小,这会使下载大文件(例如,DVD的ISO)变得不可能或者至少比它需要的难度大得多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |