Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Entpacker" erstellen (zip.datei) (https://www.delphipraxis.net/149078-entpacker-erstellen-zip-datei.html)

-Phantom- 13. Mär 2010 17:02


"Entpacker" erstellen (zip.datei)
 
Hey Leute,

Ich versuche derzeit einen kleinen "Entpacker" zu programmieren.
Ich schaffe es eine .zip datei zu erstellen die auch Größe hat, aber ich kann die .zip Datei nicht mit einem "richtigen" Entpacker entpacken. Ich benutze D7 und die Zlib Unit.
So packe ich zusammen
Delphi-Quellcode:
procedure Compress(InputFileName, OutputFileName: string);
var InputStream, OutputStream: TFileStream;
  CompressionStream: ZLib.TCompressionStream;
begin
inputstream := Tfilestream.Create(InputFileName, fmOpenRead);
 try
    OutputStream:=TFileStream.Create(OutputFileName, fmCreate);
    try
      CompressionStream:=TCompressionStream.Create(clMax, OutputStream);
      try
        CompressionStream.CopyFrom(InputStream, InputStream.Size);
      finally
        CompressionStream.Free;
      end;
    finally
      OutputStream.Free;
    end;
  finally
    InputStream.Free;
  end;
  end;
procedure Decompress(InputFileName, OutputFileName: string);
var InputStream, OutputStream: TFileStream;
  DeCompressionStream: ZLib.TDeCompressionStream;
  Buf: array[0..4095] of Byte;
  Count: Integer;
begin
  InputStream:=TFileStream.Create(InputFileName, fmOpenRead);
  try
    OutputStream:=TFileStream.Create(OutputFileName, 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;
// erst mal nur packen
procedure TForm1.sButton1Click(Sender: TObject);
begin
savedialog1.Execute;
speicher := savedialog1.FileName;
Compress(pfadn,speicher+'.zip');// pfadn = die Dateien in der Listbox , Speicher = der Speicherort wo die .zip Datei erstellt werden soll.
end;
Das Problem ist:
Wenn ich die .zip Datei entpacken will kommt die Fehlermeldung von meinem Entpacker
"Error this file Format cannot be extracted"

himitsu 13. Mär 2010 17:09

Re: Zip
 
TCompressionStream komprimiert nur, aber es erstellt den nötigen ZIP-File-Header nicht, welcher zum Zip-Dateiformat gehört.

Wenn ich mich nicht irre, so wurde dieses "Problem" schon ein-/zweimal in anderen Threads behandelt.

-Phantom- 13. Mär 2010 17:13

Re: Zip
 
Wie erstelle ich den "Header". Was ist das überhaupt

himitsu 13. Mär 2010 17:20

Re: Zip
 
http://de.wikipedia.org/wiki/ZIP_%28Dateiformat%29

Der "Header" beschreibt was wo und in welchem Format in der Datei liegt.

TCompressionStream erstellt aber nur die Daten, also es komprimiert nur den Dateiinhalt.
Die Daten/Informationen über Dateiname, sonstige Informationen, wie Dateigröße, Datum usw. und vorallem wo in der Datei der komprierte Dateiinhalt liegt, daß müßtest du selber erstellen.

Oder du vberwendest eine ZIP-Komponente, welche diesen Header verwaltet.
Mir fällt zwar grad kein Komponentenname ein, aber dieses sollte sich in den anderen ZIP-Threads finden lassen > Hier im Forum suchenzip oder Hier im Forum suchenzip komprimieren > http://www.delphipraxis.net/internal...p+komprimieren

-Phantom- 13. Mär 2010 18:32

Re: Zip
 
Oke... Also so wie hier
http://www.delphipraxis.net/internal...ct.php?t=42047 ?

Luckie 13. Mär 2010 19:10

Aussagekräftiger Titel
 
Bitte gib deinem Beitrag einen aussagekräftigen Titel. Der jetzige Titel lässt nicht erkennen, um was für ein Problem oder Frage es sich handelt. Um den Titel zu ändern, editiere einfach deinen ersten Beitrag. Damit erleichterst du das Auffinden deines Beitrages mit der Suche und ersparst anderen Mitglieder ein unnötiges Öffnen deines Beitrages.

DeddyH 13. Mär 2010 19:12

Re: Zip
 
Nichtsdestotrotz werfe ich mal wieder Abbrevia in den Raum.

-Phantom- 13. Mär 2010 19:26

Re: "Entpacker" erstellen (zip.datei)
 
Das scheit ja schon mal nicht schlecht zu sein... muss nur noch lernen wie man damit umgeht..

scrat1979 13. Mär 2010 22:05

Re: "Entpacker" erstellen (zip.datei)
 
ich nehme immer ZipForge von ComponentAce

-Phantom- 14. Mär 2010 12:21

Re: "Entpacker" erstellen (zip.datei)
 
Ich habe es nun mit der Abbrevia Komponente gemacht. So ich schaffe es nun ein .zip Datei zu erstellen. Aber wie bekomme ich mehrere Dateien in die .zip ? ( Soll ich neues Thema aufmachen?)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 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