Autor Beitrag
KlimasDavid
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 19.01.19 14:06 
Hallo,

ich habe folgende Procedure zum entpacken einer GZip datei (*.gz) :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  Str1 := 'C:\test.gz');
  if FileExists(Str1) = False then exit;

  FileIn := TFileStream.Create(Str1, fmOpenRead);
  try
    DecompressionStream:=TDecompressionStream.Create(FileIn, 15+16);
    try
      FileOut := TFileStream.Create(Str1 + '.txt', fmCreate);
      try
        FileOut.CopyFrom(DecompressionStream,DecompressionStream.Size);
        finally
      FileOut.free;
      end;
    finally
      DecompressionStream.free;
    end;
  finally
    FileIn.free;
  end;


Die orginale Text Datei im gz ist 15 Mb gross, die FileOut Datei aber nur 300kb. Mehrere hundert Zeilen sind einfach verschwunden. Wenn ich mit windows entpacke, hab ich die richtige grösse. Woran kann das liegen ?

Danke

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Immer noch keine Antwort. Um das problem zu umgehen, entpacke ich meine Datei per WinRar command line. WVielleicht gibt es noch eine bessere lösung ?


Moderiert von user profile iconChristian S.: Topic aus Internet / Netzwerk verschoben am Sa 19.01.2019 um 21:27
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 868
Erhaltene Danke: 145

Win7
VS 2013, VS2015
BeitragVerfasst: So 20.01.19 16:01 
Moin

Ich würde spontan vermuten, dass DecompressionStream.Size die Größe der komprimiertern Daten angibt. Und du in Zeile 10 dann zu wenig kopierst.

ausblenden Delphi-Quelltext
1:
.Create(FileIn, 15+16);					

Was bedeutet eigentlich das 15+16 da?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6333
Erhaltene Danke: 134

Windows 7 + Windows 10
Tokyo Prof + CE
BeitragVerfasst: Mo 21.01.19 07:26 
Wenn ich mir das Beispiel von Emba ansehe, sieht dein Source so aus, als würdest du die Komprimierungs-Methode und nicht dei De-Komprimierungs-Methode verwenden.
KlimasDavid Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 24.01.19 20:14 
user profile iconjfheins hat folgendes geschrieben:

Was bedeutet eigentlich das 15+16 da?


16 is flag that gzip stream used, not zlib.
15 is maximum memory usage, to speed-up decompression.

Moderiert von user profile iconChristian S.: Beiträge zusammengefasst

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mir das Beispiel von Emba ansehe, sieht dein Source so aus, als würdest du die Komprimierungs-Methode und nicht dei De-Komprimierungs-Methode verwenden.


Hallo Peter, dein Beispiel gilt nur für Zip dateien, kann aber nicht für gzip angewendet werden. Die Komprimierung ist anders.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 24.01.19 21:48 
- Nachträglich durch die Entwickler-Ecke gelöscht -