Entwickler-Ecke

Dateizugriff - Zlib - Fehler: Ungültige Stream Operation


FloFri - Do 09.10.03 13:34
Titel: Zlib - Fehler: Ungültige Stream Operation
Hi!

Ich hoffe, mir kann einer helfen. Ich habe folgenden code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var  
  CompressedFile, PluginFile: TFileStream;
  Compressor: Zlib.TDecompressionStream;  
begin
  CompressedFile := TFileStream.Create(filename, fmOpenRead);
  CompressedFile.Seek(0, sofrombeginning);
  PluginFile := TFileStream.Create(Filename + '.unc', fmCreate);
  Compressor := TDeCompressionStream.Create(PluginFile);
  Compressor.CopyFrom(CompressedFile, CompressedFile.Size); 
  Compressor.Free;
  CompressedFile.Free;
...

Ich will die Datei in CompressedFile nach PluginFile dekomprimieren.

Ich bekomme aber bei dem Aufruf:

Delphi-Quelltext
1:
Compressor.CopyFrom(CompressedFile, CompressedFile.Size);                    

immer den Fehler
Zitat:
Ungültige Stream Operation

Was stimmt da nicht???

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


barfuesser - Do 09.10.03 16:23

Du mußt den komprimierten Stream an TDecompressionStream übergeben und nicht umgedreht. Anschließend kannst Du dann den TDecompressionStream kopieren. Allerdings dürfte ein einfaches CopyFrom nicht funktionieren, da die Anzahl der zu kopierenden Bytes nicht gleich der Dateigröße der komprimierten Datei sein kann.

barfuesser


FloFri - Do 09.10.03 17:03

Wie mach ich das dann am besten?

Ich habs mit dem Versucht:


Quelltext
1:
2:
3:
4:
5:
  while True do
    begin
      i := Compressor.Read(Buffer, 1);
      if i <> 0 then PluginFile.Write(Buffer, i) else Break;
    end;


Aber dannach ist PluginFile.Size = 0

Kann doch eigendlich nicht sein, oder? Ich brauche nähmlich PluginFile.Size später noch.


mimi - Mi 15.10.03 18:40

ich habe das gleiche problem, nur mit BZIP2, hast du das problem behben können ?