![]() |
Re: Dekomprimierung eines Streams
1. TDecompressionStream gibt den im Constructor angegeben Stream nicht frei.
2. Der Fehler liegt einfach nur daran, dass du den als aStream übergebenen Stream mit TFileStream nur zum Lesen geöffnet hast und nun mit Size := 0 und CopyFrom() beschreiben willst, was dieser (aus verständlichen Gründen) verweigert... |
Re: Dekomprimierung eines Streams
So, hab den Fehler nun gefunden. Der Quellstream (Filestream) war nur zum lesen geöffnet.
Delphi-Quellcode:
Danke für Eure Hilfe.
{Kompremiert den Stream}
PROCEDURE CompressStream(aStream: TStream); VAR {$ifdef VER200} //Delphi 2009 zc: TZCompressionStream; {$else} {$ifdef VER180} //Delphi 2006 or Turbo Delphi zc: TCompressionStream; {$endif} {$endif} ms: TMemoryStream; BEGIN ms := TMemoryStream.Create; TRY {$ifdef VER200} //Delphi 2009 zc := TZCompressionStream.Create(ms, zcMax); {$else} {$ifdef VER180} //Delphi 2006 or Turbo Delphi zc := TCompressionStream.Create(clMax, ms); {$endif} {$endif} TRY zc.CopyFrom(aStream, 0); FINALLY zc.Free; END; aStream.Size := 0; aStream.copyFrom(ms, 0); FINALLY ms.Free; END; END; {Dekompremiert den Stream} PROCEDURE DecrompressStream(aStream: TStream); VAR {$ifdef VER200} //Delphi 2009 zc: TZDecompressionStream; {$else} {$ifdef VER180} //Delphi 2006 or Turbo Delphi zc: TDecompressionStream; {$endif} {$endif} ms: TMemoryStream; BEGIN ms := TMemoryStream.Create; TRY {$ifdef VER200} //Delphi 2009 zc := TZDecompressionStream.Create(aStream); {$else} {$ifdef VER180} //Delphi 2006 or Turbo Delphi zc := TDecompressionStream.Create(aStream); {$endif} {$endif} TRY ms.CopyFrom(zc, 0); FINALLY zc.Free; END; aStream.Size := 0; aStream.copyFrom(ms, 0); FINALLY ms.Free; END; END; Greeny :cheers: :cheers: |
Re: Dekomprimierung eines Streams
Zitat:
|
Re: Dekomprimierung eines Streams
Wenn man schon mal den Fehler hatte, lässt er sich sicher einfach lokalisieren. Aber scheint so, als ob nicht nur meine Glaskugel in den Urlaub ist.
Dank Euch :cheers: :cheers: |
Re: Dekomprimierung eines Streams
Zitat:
|
Re: Dekomprimierung eines Streams
PS: auch ohne es auszuprobieren, bin ich mir sicher, daß es, wenn für deinen QuellCode kein D2006 oder D2009 verwendet wird, es bei zc.CopyFrom(aStream, 0); einen Compilerfehler hageln wird, daß zc unbekannt ist, da es vorher nicht deklariert wurde.
[edit] ja und nun bin ich mal neugierig, was da bei meinem TestCode falsch lief, da der verwendete MemoryStream ja sozusagen Lese- und Schreibrechte gewären sollte. |
Re: Dekomprimierung eines Streams
Hallo himitsu,
da hast Du recht, der Code läuft aktuell nur auf D2006 und D2009. Eine Anpassung überlasse ich gerne den Freiwilligen, welche den WebUpdater verwenden möchten. Da ich mit beiden Entwicklungsumgebungen arbeite, ist es für mich derzeit gut so. Produktiv bin ich nur noch mit D2009 unterwegs. Schau Dir mal in meinen Post, die Procedure zum Komprimieren eines Streams an. Mir scheint, daß hier (bei deiner Komprimierunsroutine) etwas im argen liegt. Grüße Greeny |
Re: Dekomprimierung eines Streams
Also das Komprimieren hatte ich grad hinbekommen, aber das Dekomprimieren sieht genauso aus, wie bei dir und wie gesagt, ich verwende ja 'nen MemoryStream und da würde ich eigentlich kein Problem bezüglich nur Lesen sehen :gruebel:
Seit wann (Delphiversion) gibt es denn TZCompressionStream? Anstatt da statisch nur auf die beiden Versionen einzugehn, würde ich einfach ab dieser Version umschalten. |
Re: Dekomprimierung eines Streams
hallo himitsu,
wenn ich deinen Kode nehme, den Stream am Schluß wieder freigebe und meine beiden Routinen einsetze, scheint es zu funktionieren. Wie macht man das denn, für alle Versionen darüber und darunter freizugeben? Ich bin ja nur ein GreenHorn :roll: Den TZC../TCD.. gibts bei D2009 und dies ist halt meine hauptsächlich verwendete Version. Darunter sind diese nicht zu finden (hab auch nur in D2006 gesucht). Noch einen schönen Sonntag Greeny |
Re: Dekomprimierung eines Streams
hmmm, sehr eigenartig :shock:
seit 'ner ganzen Weile können die Compiler das $IF und somit ist da soetwas möglich > CompilerVersion ist eine virtuelle Konstante in der Unit System, > welche aber in Wirklichkeit vom Compiler gesetzt wird
Delphi-Quellcode:
{$if CompilerVersion >= 20.0} // ab Delphi 2009
zc: TZCompressionStream; {$else} zc: TCompressionStream; {$ifend} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz