delphi - tfilestream.seek 和偏移混淆

标签 delphi indy tfilestream

这是取自 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 单独用于偏移起搏器工作(我正在尝试 通过暂停恢复支持进行下载管理) 并将上面代码中的 tfilestream 替换为 tmemmorystream 对程序有影响吗?

如果重要的话:我使用 d2007 和 d2010

最佳答案

看起来您正在从文件末尾开始查找 1024(或者 0,如果文件还没有那么大)。这一切都与恢复传输有关。您认为文件末尾已损坏。删掉那些废话(或者从 0 开始),这样就不会在坏数据之后添加好数据。

打个比方:你正在 build 一座冰城堡。天黑了,一夜之间下着冻雨。第二天,你拿起电锯锯掉了一英寸的污垢,露出了干净的冰。现在你从那里开始构建。

关于delphi - tfilestream.seek 和偏移混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3084793/

相关文章:

delphi - 通过 Delphi 和 Indy 10 TIdHTTP 获取 WebDAV 内容

delphi - 将位图写入/读取到 tfilestream

delphi - 如何刷新 TFileStream?

delphi - (宽)字符串 - 存储在 TFileStream,Delphi 7 中。最快的方法是什么?

javascript - 如何使用来自 Delphi 的 Google Chrome 浏览器的 V8 JavaScript 解释器?

C# 到 Oxygene 代码转换器

delphi - 对 delphi 2010 代码进行逆向工程 - UML 工具

delphi - 在另一个泛型类声明的约束中使用泛型接口(interface)

multithreading - 使用-DELPHI中的Indy组件(idTCPServer/idTCPClient)的单服务器与多客户端实时监视系统

sockets - 未收到 Indy TCP 客户端数据