2009-02-25 343 views
1

时下面的代码引发包含消息的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行当然会导致内存泄漏。

回答

3

粉碎机

行者做了FStream.Seek(FBufPos - FBufCount,soCurrent)在它的析构

由于向后查找而引起错误get。如果你打电话给Reader.FlushBufferReader.Position:= soFromBeginning在释放读者之前,错误消失了吗?


从TDecompressionstream的评论。 TDecompressionStream是只读和单向的;你可以在流中寻求前进,但不能倒退。

问候,
利芬

+0

的错误没有消失遗憾的是......这一定是一个很常见的使用场景......我真的很困惑......感谢寻找到的! – jpfollenius 2009-02-25 10:30:55