Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi gzip und zip entpacken (https://www.delphipraxis.net/119152-gzip-und-zip-entpacken.html)

itashadow 21. Aug 2008 08:15


gzip und zip entpacken
 
Hi
also vorab ich habe delphi 2007

und ich bekomme per mail dateien rein die ab und zu in gzip und zip gepackt sind.

das problem ist das ich Programmintern an die darin enthaltene txt datei muss.

hab schon hier im forum gesucht doch die möglichkeiten die infrage kommen funktionieren leider nicht...

bsp.

Delphi-Quellcode:
procedure Tziptest.Decompress(InputFileName, OutputFileName: string);
var InputStream, OutputStream: TFileStream;
  DeCompressionStream: ZLib.TDeCompressionStream;
begin
  InputStream:=TFileStream.Create(InputFileName, fmOpenRead);
  try
    OutputStream:=TFileStream.Create(OutputFileName, fmCreate);
    try
      DecompressionStream:=TDecompressionStream.Create(OutputStream);
      try
        DecompressionStream.CopyFrom(InputStream, InputStream.Size);
      finally
        DecompressionStream.Free;
      end;
    finally
      OutputStream.Free;
    end;
  finally
    InputStream.Free;
  end;
end;
aufruf davon:
Delphi-Quellcode:
Decompress('d:\test.txt.gz','d:\test.txt');
der decompress code läuft zwar komplett durch allerdings wenn er wieder da weiter machen soll wo ich decompress aufgerufen habe fliegt er mit der exception:

Zitat:

Ungültige Stream-Operation
raus. warum genau ist mir leider nicht klar:(

hab auch das von Phistev dort gepostete beispiel mit der idzlibex probiert...
allerdings bekomm ich dann die meldung das idzlibex.dcu nicht vorhanden ist.


kopier ich dann die idzlibex.pas in meinen programm ornder das eine dcu erstellt wird bekomm ich folgende fehler:
Zitat:

[DCC Fehler] IdZlibEx.pas(453): E1026 Datei nicht gefunden: 'deflate.obj'
[DCC Fehler] IdZlibEx.pas(454): E1026 Datei nicht gefunden: 'inflate.obj'
[DCC Fehler] IdZlibEx.pas(455): E1026 Datei nicht gefunden: 'inftrees.obj'
[DCC Fehler] IdZlibEx.pas(456): E1026 Datei nicht gefunden: 'infback.obj'
[DCC Fehler] IdZlibEx.pas(457): E1026 Datei nicht gefunden: 'inffast.obj'
[DCC Fehler] IdZlibEx.pas(458): E1026 Datei nicht gefunden: 'trees.obj'
[DCC Fehler] IdZlibEx.pas(459): E1026 Datei nicht gefunden: 'compress.obj'
[DCC Fehler] IdZlibEx.pas(460): E1026 Datei nicht gefunden: 'adler32.obj'
[DCC Fehler] IdZlibEx.pas(461): E1026 Datei nicht gefunden: 'crc32.obj'
[DCC Fehler] IdZlibEx.pas(336): E2065 Ungenügende Forward- oder External-Deklaration: 'deflateInit_'
[DCC Fehler] IdZlibEx.pas(339): E2065 Ungenügende Forward- oder External-Deklaration: 'deflateInit2_'
[DCC Fehler] IdZlibEx.pas(341): E2065 Ungenügende Forward- oder External-Deklaration: 'deflate'
[DCC Fehler] IdZlibEx.pas(343): E2065 Ungenügende Forward- oder External-Deklaration: 'deflateEnd'
[DCC Fehler] IdZlibEx.pas(348): E2065 Ungenügende Forward- oder External-Deklaration: 'inflateInit_'
[DCC Fehler] IdZlibEx.pas(351): E2065 Ungenügende Forward- oder External-Deklaration: 'inflateInit2_'
[DCC Fehler] IdZlibEx.pas(353): E2065 Ungenügende Forward- oder External-Deklaration: 'inflate'
[DCC Fehler] IdZlibEx.pas(355): E2065 Ungenügende Forward- oder External-Deklaration: 'inflateEnd'
[DCC Fehler] IdZlibEx.pas(357): E2065 Ungenügende Forward- oder External-Deklaration: 'inflateReset'
hab echt keine ahnung wie ich weiter machen soll:(

hat vielleicht jemand einen hinweis oder ein beispiel??

Bernhard Geyer 21. Aug 2008 08:51

Re: gzip und zip entpacken
 
Hast du einen komprimierten Datenstream oder doch nur ein ZIP/GZIP-Archiv das mit WindZip& Co geöffnet werden könnte?

itashadow 21. Aug 2008 08:53

Re: gzip und zip entpacken
 
nur das Archiv

itashadow 22. Aug 2008 11:31

Re: gzip und zip entpacken
 
hat den keienr einen tip?:(

HeinzJ 22. Aug 2008 12:08

Re: gzip und zip entpacken
 
füge das verzeichnis, wo die '*.obj' dateien liegen, zu deinem projekt hinzu.

itashadow 22. Aug 2008 12:47

Re: gzip und zip entpacken
 
juhu danke:)
das klappt nu schonmal.

allerdings bekomm ich dann bei der methode mit idzlibex
Delphi-Quellcode:
function tziptest.GZipStreamToString(const input: TStream): string;
var temp: TMemorystream;
begin
  input.Seek(0, soFromBeginning);
  temp:= TMemorystream.Create;
  ZDecompressStream(input, temp); //<-- da kommt der fehler...
  SetLength(result, temp.Size);
  temp.Read(result[1], temp.Size);
end;
folgende zugriffsverletzung:

'data error'


wobei ich die streams so bestücke:

Delphi-Quellcode:
FS1:= TFileStream.Create('d:\test.txt.gz', fmOpenRead);
wo ist der fehler? :(

itashadow 25. Aug 2008 09:51

Re: gzip und zip entpacken
 
komm irgendwie nicht weiter:(

gammatester 25. Aug 2008 11:52

Re: gzip und zip entpacken
 
Zitat:

Zitat von itashadow
komm irgendwie nicht weiter:(

Zwei kurze Hinweise:

1) .gz-Datei solltest Du einfach lesen können.
2) .zip-Dateien nicht ohne einigen Aufwand.

Zu 1: Bei zlib gibt es die Datei gzio.c, die direktes arbeiten mit .gz-Dateien implementiert. Kann zZ nicht sagen, ob bei den Delphi-Distributionen sowas dabei ist (glaube eher nicht). Eine gzio.pas findest Du in meiner zlib 1.14-Implementation (basiert auf der nicht mehr gepflegten paszlib). Benutzbar wie folgt:

Delphi-Quellcode:
uses
  zlibh,gzio;
var
  f: gzfile;
  c: int;
begin
  f := gzopen(filename, 'r');
  while not gzeof(f) do begin
    c := gzgetc(f);
    if c>0 then write(char(c));
  end;
end.
Zu 2: Da gibts eigentlich viel Quellcode und Komponenten, im original C-Archive und meinem Port geht das mit dem Mini-Unzip-Programm MiniUnz.

Gruß Gammatester

itashadow 25. Aug 2008 14:06

Re: gzip und zip entpacken
 
hey danke schonmal :-D

aber da hab ich leider ein kleines problem...

bei gzopen gibts leider ne exception...

in der gzio fliegt er in zeile
396 raus

Delphi-Quellcode:
err := inflateInit2_(stream, -DEF_WBITS, ZLIB_VERSION, sizeof(z_stream));
bzw wenn ich ihn weiter verfolge dann ist es genau die zeile 431 der zutil

Delphi-Quellcode:
procedure Trace(const x: string);
begin
  write(x);
end;
( X hat zu der zeit den wert:
Zitat:

inflate: blocks allocated

meldung ist:
Zitat:

E/A-Fehler 105.
woran liegt das?

gammatester 25. Aug 2008 14:54

Re: gzip und zip entpacken
 
Zitat:

Zitat von itashadow
hey danke schonmal :-D

aber da hab ich leider ein kleines problem...

bei gzopen gibts leider ne exception...

in der gzio fliegt er in zeile
396 raus

Delphi-Quellcode:
err := inflateInit2_(stream, -DEF_WBITS, ZLIB_VERSION, sizeof(z_stream));
bzw wenn ich ihn weiter verfolge dann ist es genau die zeile 431 der zutil

Delphi-Quellcode:
procedure Trace(const x: string);
begin
  write(x);
end;
( X hat zu der zeit den wert:
Zitat:

inflate: blocks allocated

meldung ist:
Zitat:

E/A-Fehler 105.
woran liegt das?

Das ist die Debug-Ausgabe. Wahrscheinlich kompilierst Du kein Konsolprogramm und die Ausgabe erfolgt auf eine nicht geöffnet Konsole. Du hast wohl in den Projektoptionen Debug definiert, wenn Du das nicht machst, sollte der Fehler verschwinden [oder Du hast eine Bug entdeckt :( )]. Wenn Du die GUI- Debugausgabe brauchst, müßte man in trace auf OutputDebugString(pchar(x)) umsteigen (und uses windows).

Gruß Gammatester


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Seite 1 von 2  1 2      

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