以下代码抛出一个EZDecompressionError消息'无效的ZStream操作'每行
Reader.Free
已执行。有人能告诉我这段代码有什么问题吗?
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;
我测试过更改内存释放命令的顺序,但这似乎没有帮助。抛弃Reader.Free线当然会导致内存泄漏。
答案 0 :(得分:4)
Smasher
TReader在析构函数中执行 FStream.Seek(FBufPos - FBufCount,soCurrent)。
由于向后搜索,错误得到了提升。如果您在释放阅读器之前调用 Reader.FlushBuffer 和 Reader.Position:= soFromBeginning ,错误是否会消失?
来自TDecompressionstream的评论。 TDecompressionStream是只读和单向的;你可以在溪流中寻找前进,但不能倒退。
的问候,
利芬