Autor Beitrag
SiRoX
Hält's aus hier
Beiträge: 5

Windows 7 Ultimate
Delphi 2010
BeitragVerfasst: Di 17.11.09 15:18 
Hallo Freunde des Delphi- Codes! :D

Für die Erstellung eines Update- Programmes, versuche ich Dateien, die mir von extern gepackt in ZIP- Dateien zugeschickt werden mit Delphi zu entpacken. Nach Internetrecherchen bin ich auf die Zlib- Funktion von Delphi gekommen. Das funktioniert auch soweit nach dem vorgegebenem Code, jedoch nur mit Dateien, die ich auch vorher mit Delphi gepackt habe.
Was muss ich tun, um die Dateien, die mit einem beliebigen Packprogramm erstellt worden sein können, zu entpacken?

Hier mein bisheriger Code: (Mit dem es eine Fehlermeldung gibt.)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
var InputStream, OutputStream: TFileStream;
  DeCompressionStream: ZLib.TDeCompressionStream;
  Buf: array[0..4095of Byte;
  Count: Integer;
begin
  InputStream:=TFileStream.Create('d:\test.zip', fmOpenRead);
  try
    OutputStream:=TFileStream.Create('d:\test_unzip.txt', fmCreate);
    try
      DecompressionStream := TDecompressionStream.Create(InputStream);
      try
        while true do
        begin
          Count := DecompressionStream.Read(Buf[0], SizeOf(Buf));
          if Count = 0 then
            break
          else
            OutputStream.Write(Buf[0], Count);
        end;
      finally
        DecompressionStream.Free;
      end;
    finally
      OutputStream.Free;
    end;
  finally
    InputStream.Free;
  end;
end;


Ich würde mich sehr über Tipps und Anregungen freuen!
Bitte bedenkt in den Antworten, dass ich Delphi- Anfänger bin ;)


PS:
In weiteren Schritten sollen diese Dateien dann alte Dateien überschreiben, welche aber vorher gesichert werden müssten und ggf. zurückgespielt werden. Dazu aber später ggf. mehr :)
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 17.11.09 15:21 
user profile iconSiRoX hat folgendes geschrieben Zum zitierten Posting springen:

Hier mein bisheriger Code: (Mit dem es eine Fehlermeldung gibt.)

Gaaanz wichtig bei solchen Fragen im Forum: Welche Fehlermeldung (genauer Text) kommt an welcher Stelle (Codezeile). Du stellt ja auch nicht Dein Auto in die Werkstatt und sagst dem Meister "irgendwas tut nicht" und verschwindest, oder? :D

Gruß,
Jens

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
SiRoX Threadstarter
Hält's aus hier
Beiträge: 5

Windows 7 Ultimate
Delphi 2010
BeitragVerfasst: Di 17.11.09 15:38 
Ja, das leuchtet ein... :)

Ok, also mein Programm erstellt zwar schon die test_unzip.txt, die ist aber ohne Inhalt.
Die Fehlermeldung sagt folgendes:
"Im Projekt XY ist eine Exception der Klasse EZdecompressionError mit der Meldung 'Data Error' aufgetreten"
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 17.11.09 17:07 
ZLib packt einen Datenstrom, keine zip Dateien.
Echte Zip Dateien haben noch mehr Daten, als nur die gepackte Datei, z.B. einen Header wo die Dateinamen drinstehen (notwendig, weil man ja auch mehrere Dateien in ein ZIP packen kann) - damit kommt zlib nicht klar.
Glaub das Format, was zlib kann, hat eine andere Endung. War das .gz ? Weiß ich nicht mehr.

Fakt ist: Wenn du "echte" zip Dateien entpacken willst, brauchst du eine entsprechende Komponente. Forensuche sollte hier weiterhelfen.

_________________
PROGRAMMER: A device for converting coffee into software.