2009-02-25 66 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