![]() |
Gezipte Daten entpacken
Hallo
ICh hab ein Setupprogramm gemacht wo existierende Daten in ein Zielverzeichnis kopiert Jetzt die Frage: ICh will Als existierende Daten Zips verwenden und dann entpacked ins zielverzeichnis schicken um Platzt zu sparen. Wie kann ich die Zips entpacken mit delphi ? |
Re: Gezipte Daten entpacken
Bei Delphi ist die zLib dabei. Es gibt aber noch andere, bessere Komponenten. Eine Suche im Forum, wird genug Treffer und Vorschläge bringen.
|
Re: Gezipte Daten entpacken
Gut und danke Lucky
aber das hilft mir nicht viel wiel ich keine Ahnung hab wie ich zlib anwende quellcode und so! Kansch mir ein Beispiel Schreiben? |
Re: Gezipte Daten entpacken
Benutz mal die Suche hier im Forum, das hatten wir schon öfters.
|
Re: Gezipte Daten entpacken
Hi, ich hab dir mal n beispiel aus nem Code von mir gemacht. Folgender Code komprimiert/dekomprimiert einen MemoryStream:
Delphi-Quellcode:
{Daten eines MemoryStreams komprimieren}
function Compress(var MemoryStream: TMemoryStream): double; var CompressionStream: ZLib.TCompressionStream; temp: TMemoryStream; begin temp := TMemoryStream.Create; CompressionStream := TCompressionStream.Create(clmax, temp); try MemoryStream.Seek(0, soFromBeginning); CompressionStream.CopyFrom(MemoryStream, MemoryStream.Size); temp.Seek(0, soFromBeginning); MemoryStream.Seek(0, soFromBeginning); MemoryStream.CopyFrom(temp, temp.Size); result := CompressionStream.compressionrate; finally CompressionStream.Free; temp.Free; end; end; {Daten eines MemoryStreams dekomprimieren} procedure Decompress(var MemoryStream: TMemoryStream); var DeCompressionStream: ZLib.TDeCompressionStream; temp: TMemoryStream; begin temp := TMemoryStream.Create; DecompressionStream := TDecompressionStream.Create(temp); try MemoryStream.Seek(0, soFromBeginning); DecompressionStream.CopyFrom(MemoryStream, MemoryStream.Size); MemoryStream.Seek(0, soFromBeginning); temp.Seek(0, soFromBeginning); MemoryStream.CopyFrom(temp, temp.Size); finally DecompressionStream.Free; temp.Free; end; end; |
Re: Gezipte Daten entpacken
Ok danke aber hast du ne Idee wie mann damit Exen Zipen und entzipen kann
Und Luckie ich hab schon gesucht aber net geblickt |
Re: Gezipte Daten entpacken
Moin Zusammen,
nur der Vollständigkeit halber sei noch Turbo Power Abbrevia erwähnt. Zu finden bei sourceforge.net |
Re: Gezipte Daten entpacken
Hi,
Also erstmal an Mr.Knogge: Dein Code kann zwar bei mir zippen, aber erst als ich die Variable temp als Ausgangs Datei benutzte denn zuvor waren die DAeten vor der Komprimierung ind danach genau gleich groß!!! und das entzippen ging dann garnicht mehr da hat er immer eine Fehlermeldung beim Ausfuhren des Decompressions Befehls gegeben Kannst du das mit deinem Code nochmal nachprüfen ob der so stimmt wie er dortsteht oder liegt es daran das ich was falsch gemacht hab ich schrieb es etwa so:
Delphi-Quellcode:
und da warn sie gleich groß als ich dann sie temp variable deines codesProcedure Button1click usw. var c:Tmemorystream; begin c:= Tmemorystream.create; if opendialog1.execute then c.loadfromfile(opendialog1.filename); compress(c); if savedialog1.execute then c.savetofile(savedialog1.filename); end; speicherte war sie kleiner also mit der temp hats getan, ich hab eben noch das temp free wird raus gemnacht aber das decompression ding tat garnicht da er sagte das bei deinem code was falsch ist!! kanst du das bitte uberprüfen |
Re: Gezipte Daten entpacken
Ok tut jetzt alles
ichh hab was anderes gefunden aber danke an allle |
Re: Gezipte Daten entpacken
Und was hast du gefunden?
|
Re: Gezipte Daten entpacken
Hast du was in deinem Code, oder was in meinem Code gefunden ?
Ich konnte jetzt keinen Fehler finden :? |
Re: Gezipte Daten entpacken
also ich weis net wo ichs her hab aber so siets aus:
packen:
Delphi-Quellcode:
und entpacken
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;
Delphi-Quellcode:
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz