2009-02-25 3 views
1

Le code suivant renvoie une EZDecompressionError avec le message 'Opération non valide zStream' à chaque fois que la ligneException lors de la destruction TReader

Reader.Free 

est exécutée. Quelqu'un peut-il me dire ce qui ne va pas avec ce code? J'ai testé pour changer l'ordre des commandes de libération de mémoire, mais cela ne semble pas aider. Laissant de côté la ligne Reader.Free entraîne une fuite de mémoire.

Répondre

3

Smasher

TReader fait un FStream.Seek (FBufPos - FBufCount, soCurrent) dans son destructor.

L'erreur est déclenchée en raison d'une recherche en arrière. Si vous appelez Reader.FlushBuffer et Reader.Position: = soFromBeginning avant de libérer le lecteur, l'erreur disparaît-elle?


Depuis les commentaires de TDecompressionstream. TDecompressionStream est en lecture seule et unidirectionnel; vous pouvez chercher en avant dans le flux, mais pas en arrière.

Cordialement,
Lieven

+0

L'erreur ne disparaît malheureusement pas ... cela doit être un scénario d'utilisation assez commune ... Je suis vraiment confus ... merci pour la recherche dans ce! – jpfollenius

+0

L'erreur get est déclenchée car le destructeur de TReader effectue probablement une recherche arrière dans votre flux. D'une manière ou d'une autre, vous devez vous assurer que ceci est changé en une recherche avant pour contourner l'exception. –

+0

plante encore :(TReader n'est-il pas supposé être utilisé en conjonction avec TDecompressionStream? – jpfollenius

Questions connexes