AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dekomprimierung eines Streams

Ein Thema von GreenHorn3600 · begonnen am 23. Aug 2009 · letzter Beitrag vom 24. Aug 2009
Antwort Antwort
Seite 1 von 3  1 23      
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#1

Dekomprimierung eines Streams

  Alt 23. Aug 2009, 15:59
Hallo Wissende,

ich bin mal wieder am verzweifeln. Weshalb lässt sich der Stream nicht dekomprimieren?

Delphi-Quellcode:
{Dekompremiert den Stream}
procedure DecrompressStream(aStream: TStream);
var
  zc: TDecompressionStream;
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
   zc := TDecompressionStream.Create(aStream);
   try
      ms.CopyFrom(zc, 0);
    finally
      zc.Free;
    end;
    aStream.Size := 0;
    aStream.copyFrom(ms, 0); //<< Hier kommt der Fehler
  finally
    ms.Free;
  end;
end;
Er bringt mir immer den Fehlercode 5 (System Error, Zugriff verweigert). Nur warum und was kann man gegen tun?

Edit: Es handelt sich mal wieder um die ZLib, Fehlerstelle gekennzeichnet

Grüße
Greeny
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#2

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 16:12
sicher, daß .CopyFrom(..., 0) korrekt so ist?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#3

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 16:25
Sicher? Zwischenzeitlich nicht mehr...

aber der Fehler kommt hier:

aStream.Size := 0; scheint also nicht wirklich damit zusammenzuhängen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#4

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 16:48
was ist denn in aStream für ein Stream drinnen?
nicht jeder StreamTyp unterstützt alle Befehle

[add]
und wegen der 0 in CopyFrom ... da gibt man Count an, also die Anzahl der zu kopierenden Bytes ... bei dir also NICHTS
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#5

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 16:50
Hallo,

dies ist ein TFileStream, welcher einen zuvor Komprimierten Stream enthält. Dieser soll wieder DeKomprimiert und verarbeitet werden. Daher auch die ganze hin- und herkompiererei.

Igendwo, scheint der Wurm drin zu sein.
  Mit Zitat antworten Zitat
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#6

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 16:51
Zitat von himitsu:
[add]
und wegen der 0 in CopyFrom ... da gibt man Count an, also die Anzahl der zu kopierenden Bytes ... bei dir also NICHTS
stimmt nicht ganz, wenn hier bei .copyFrom(..., 0) angegeben ist, so wird intern die Position und die Größe gesetzt. Ist eine Erleichterung.

Ups, Fehlerstelle falsch markiert: hier kommt er aStream.Size := 0; also eine Zeile früher. Das kommt davon, wenn man ständig am kämpfen ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#7

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 16:58
ok, dann arbeite ich wohl zu selten mit Stream (dachte das war bei -1)

ja, wie gesagt, was für einen Stream übergibst du denn nun der Prozedur?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#8

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 17:01
Zitat von GreenHorn3600:
Hallo,

dies ist ein TFileStream, welcher einen zuvor Komprimierten Stream enthält. Dieser soll wieder DeKomprimiert und verarbeitet werden. Daher auch die ganze hin- und herkompiererei.

Igendwo, scheint der Wurm drin zu sein.

Was soll ich da erst sagen, Streams brauchte ich bisher noch nie, nur dieses mal, komme ich irgendwie nicht dran vorbei
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 17:14
Hilft das? http://www.delphipraxis.net/internal...=480137#480137
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#10

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 17:21
gibt TDecompressionStream den aStream vielleicht frei?


ich hab es jetzt mal so versucht unb scheitere schon beim 1. CopyFrom, also beim Komprimieren

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes, ZLib;

{Dekompremiert den Stream}
procedure DecompressStream(aStream: TStream);
var
  zc: TDecompressionStream;
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
   zc := TDecompressionStream.Create(aStream);
   try
      ms.CopyFrom(zc, 0);
    finally
      zc.Free;
    end;
    aStream.Size := 0;
    aStream.CopyFrom(ms, 0);
  finally
    ms.Free;
  end;
end;

{Kompremiert den Stream}
procedure CompressStream(aStream: TStream);
var
  zc: TCompressionStream;
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
    zc := TCompressionStream.Create(clDefault, ms);
    try
      zc.CopyFrom(aStream, 0);
    finally
      zc.Free;
    end;
    aStream.Size := 0;
    aStream.CopyFrom(ms, 0);
  finally
    ms.Free;
  end;
end;

Var
  M: TMemoryStream;

begin
  M := TMemoryStream.Create;
  M.Write(M, 4); // irgendwas einlesen, damit was drin ist
  CompressStream(M);
  DecompressStream(M);
end.
[edit] Fehler im CompressStream behoben (Source und Dest sozusagen vertauscht) geht aber dennoch nicht
[edit2] OK, komprimieren geht nun
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz