加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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;

我不明白究竟是什么偏移和
为什么Max(0,Fs.Size-1024)在它的占位符中
如果你去下面(在代码中)

// alternatively:
    // Fs.Seek(-1024,soFromEnd);

到底是什么’-1024’…为什么总是使用1024 / -1024?
并且会在抵消的起搏器工作中单独使用fs.size(我正在努力
使用暂停恢复支持进行下载管理)
并将在上面的代码中用tmemmorystream替换tfilestream
对程序有什么影响?

如果重要:我使用d2007和d2010

解决方法

由于这是试图创建一个可以停止和恢复下载的下载管理器,这里的想法是,当你恢复时,它想要退一步并重新请求以前发送的一些数据,以防断开连接是由导致收到的数据损坏的错误引起的.我见过的大多数下载管理器都会退回至少4 KB;看起来这个只做1 KB.

如果你将fs.Size单独放在占位符中,那么它根本不会退回,这可能会让你对数据损坏的可能性开放.

用TMemoryStream替换TFileStream意味着你要下载到RAM而不是光盘,如果计算机崩溃或断电或者你的应用程序以某种方式崩溃,所有进度都会丢失.所以这不是一个好主意.此外,下载到RAM会将下载的大小限制为地址空间的可用大小,这会使下载大文件(例如,DVD的ISO)变得不可能或者至少比它需要的难度大得多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读