销毁 TReader 时的异常

jpf*_*ius 3 delphi file-io memory-management

下面的代码抛出一个 EZDecompressionError 和消息“无效的 ZStream 操作”

Reader.Free
Run Code Online (Sandbox Code Playgroud)

被执行。有人能告诉我这段代码有什么问题吗?

Reader := nil;
Decompressor := nil;
InputFile := TFileStream (FileName, fmOpenRead);
try
  Decompressor := TDecompressionStream.Create (InputFile);
  Reader := TReader.Create (Decompressor, 1024);
  SomeString := Reader.ReadString;
finally
  Reader.Free
  Decompressor.Free;
  InputFile.Free;
end;
Run Code Online (Sandbox Code Playgroud)

我测试了更改内存释放命令的顺序,但这似乎没有帮助。省略 Reader.Free 行当然会导致内存泄漏。

Lie*_*ers 5

粉碎机

TReader在其析构函数中执行FStream.Seek(FBufPos - FBufCount, soCurrent)

由于向后搜索而引发错误。如果在释放读取器之前调用Reader.FlushBufferReader.Position := soFromBeginning,错误会消失吗?


来自 TDecompressionstream 的评论。TDecompressionStream 是只读和单向的;你可以在溪流中向前寻找,但不能向后寻找。

问候, 利