Entwickler-Ecke
Dateizugriff - Datenverlust beim GZip entpacken
KlimasDavid - Sa 19.01.19 15:06
Titel: Datenverlust beim GZip entpacken
Hallo,
ich habe folgende Procedure zum entpacken einer GZip datei (*.gz) :
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 Narses: Beiträge zusammengefasstImmer 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 Christian S.: Topic aus Internet / Netzwerk verschoben am Sa 19.01.2019 um 21:27
jfheins - So 20.01.19 17: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.
Delphi-Quelltext
1:
| .Create(FileIn, 15+16); |
Was bedeutet eigentlich das 15+16 da?
KlimasDavid - Do 24.01.19 21:14
jfheins 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 Christian S.: Beiträge zusammengefasst
Hallo Peter, dein Beispiel gilt nur für Zip dateien, kann aber nicht für gzip angewendet werden. Die Komprimierung ist anders.
Delete - Do 24.01.19 22:48
- Nachträglich durch die Entwickler-Ecke gelöscht -
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!