AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

7-zip Entpacker einbinden

Ein Thema von xZise · begonnen am 15. Feb 2008 · letzter Beitrag vom 4. Aug 2009
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#11

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 14:52
Ich musste für mein letztes Projekt auch 7zip verwenden (die DLL, nicht das Programm) und hab mir dazu die besagte SevenZip Komponente von Torry angeschaut. Allerdings ist die IMHO absolut schlecht designed und teilweise auch fehlerhaft implementiert -> meiner Ansicht nach ist sie absolut unbrauchbar.

Ich hab mir dann im Endeffekt eine eigene Implementierung geschrieben, diese beschränkt sich bis jetzt allerdings nur auf das Packen - entpacken war bei dem Projekt nicht notwendig, daher hab ich das nicht implementiert. Wenn du willst kann ich dir die Unit trotzdem geben, ich denke es ist recht gut erkennbar wie die 7zip-Dll verwendet werden muss (das herauszufinden war schon ein Abenteuer für sich - der Code der Dll und auch des 7zip-Programms sind so gut wie überhaupt nicht dokumentiert).

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#12

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 14:57
OH ! Toll, könntest du sie für alle an dein nächsten Beitrag hängen ? ich würde sie mir gerne mal ansehen.

Evlt. kann ich sie für meine 7Zip Oberfläche verwenden das währe toll. Ich meinte einiges konnte die SevenZip Komponente leider auch nicht, darum habe ich sie nicht genommen. Aber zum nach schauen sollte das ausreichen. Gibt es denn schon eine Header Datei für "Object Pascal" von der 7z.dll/so Datei ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#13

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 15:05
Hi Michael und Manuel,
ich habe mir mal den Universal Updater angeschaut, und habe mir dort den Code angesehen:
Delphi-Quellcode:
Zip.ExtrBaseDir := Pfad;
Zip.AddRootDir :='c:\';
Zip.SZFileName := inttostr(LatestVersion) + '.7z';
Zip.Extract();
Da die Komponente installiert war, fehlen natürlich die Initalisierungssachen.
Aber aufgrund dessen ist mir aufgefallen, dass "SZFileName" ja ein Dateiname und nicht Dateiname + Pfad haben will.
Also das geändert, und oh wunder Keine OpenDialoge mehr.
Aber was ist bzw. macht "AddRootDir" und "ExtrBaseDir"?

Und Manuel, könntest du den Code mal anhängen? Im Grunde genommen möchte ich ja nur entpacken.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#14

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 15:49
Im Anhang sind 2 Archive, einmal eines mit den Object Pascal Versionen der Headerfiles und eines mit meiner SevenZip-Klase inkl. Zubehör. Der Code ist nur teilweise kommentiert/dokumentiert, ich hoffe ihr kommt damit zurecht.
Wie gesagt beherrscht die SevenZip-Klasse bis jetzt nur Packen - dazu bekommt sie eine TCreateArchiveParams-Instanz die alle Parameter enthält. Unter anderem eine TArchiveItemList - eine Liste mit Files die in das Archiv rein sollen. Man kann jedes Element einzeln zu dieser Liste hinzufügen, oder aber (wenn ein ganzer Ordner und evnetuell Unterordner) reinsoll, dann kann man sich mit der TFileListing-Klasse ein komplettes Listing erstellen lassen (wobei TFileArchiveItem und TFolderArchiveItem als Parameter übergeben werden müssen).

Bei Unklarheiten kann ich eventuell kann ich mal ein kleines Demo erstellen.

Edit: die SevenZip-Komponente von Torry enthält zwar teilweise auch Übersetzungen der Headerfiles, allerdings von einer älteren Version und außerdem sind sie unvollständig und teilweise fehlerhaft. Die Übersetzungen im Anhang hab ich daher selbst gemacht, ich hoffe es ist alles korrekt...
Angehängte Dateien
Dateityp: zip sevenzip_267.zip (11,6 KB, 120x aufgerufen)
Dateityp: zip sevenzip_headers_194.zip (4,9 KB, 112x aufgerufen)
Manuel Pöter
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#15

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 15:50
Vielen Dank ! Werde ich mir gleich mal ansehen.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#16

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 18:35
Hmmm... Nicht gerade einfach der Code ^^

Zu der 7zVCL Komponente:
Wenn ich das wie oben mache und nur den Dateinamen setzte, dann funktionierts immer noch nicht, weil i <> 0 ist
Warum muss man das auch so benutzerunfreundlich machen.
Delphi-Quellcode:
[...]
updateOpenCallback := TMyArchiveOpenCallback.Create( self );
i := inA.Open( ms, nil, updateOpenCallback );

if i <> 0 then begin
  Result := -1;
  ErrCode:=FFileNotFound; //FHO 21.01.2007
  if assigned( onMessage ) then
    onMessage( self,FFileNotFound, c7zipResMsg[FFileNotFound],FSevenZipFileName );
   ms.Free; //FHO crash at wrong pw 25.01.2007
   Exit;
end;
[...]
(Extract-Prozedur)

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#17

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 19:45
Ja, ich seh ein, dass er am Anfang nicht gerade einfach zu verstehen ist. Vor allem da es keine wirkliche Dokumentation dazu gibt. Aber wenn man ihn einmal durchschaut hat ist er sehr einfach zu verwenden und vor allem sehr flexibel (vor allem die FileListing-Unit - auf die bin ich besonders stolz! )

Ich hab mal ein kurzes Demo zusammengeklickt, das zeigt wie man die einzelnen Klassen benutzt. Das komplette Projekt befindet sich im Anhang.

Gruß, Motzi
Angehängte Dateien
Dateityp: zip sevenzip-demo_154.zip (405,9 KB, 137x aufgerufen)
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#18

Re: 7-zip Entpacker einbinden

  Alt 12. Mär 2008, 19:03
Hi,
ich denke du kannst was mit dem Code anfangen, aber ich blicke da nicht irgendwie da so richtig durch.

Was macht z.B. TStreamReader? Im Endeffekt sieht es so aus, als würde sie... TStream imitieren ... oder nicht?
Und warum nicht TStream nehmen?

War wohl ein Fehler zu vermuten, dass OpenSource Systeme eher implementiert werden...

Zu 7zipVCL, sollte wirklich jemand das benutzten und wissen was er tut, wie umgeht man das Problem, dass in der .dfm der Demo ungültige Werte stehen?
Delphi-Quellcode:
sevenZip.LPPMDmem := 0;
sevenZip.LPPMDsize := 0;
MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#19

Re: 7-zip Entpacker einbinden

  Alt 13. Mär 2008, 12:06
Zitat von xZise:
Was macht z.B. TStreamReader? Im Endeffekt sieht es so aus, als würde sie... TStream imitieren ... oder nicht?
Und warum nicht TStream nehmen?
Die 7-zip DLL arbeitet nur mit Interfaces, mit einem TStream könnte sich nichts anfangen. Deswegen hab ich die beiden Klassen TStreamReader und TStreamWriter geschrieben, die nichts anderes sind als ein Wrapper von TStream auf IInStrem+ISequentialInStream/IOutStream+ISequentialOutStream.
Man muss zuerst einmal das System der 7-zip DLL verstehen, aber leider ist das nicht so einfach da es überhaupt nicht dokumentiert ist. Ich hab auch sehr lang gebraucht bis ich es durchschaut hab.

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#20

Re: 7-zip Entpacker einbinden

  Alt 14. Mär 2008, 23:16
Ah okay. Ist etwas verwirrend Da muss man erstmal durchblicken
Was macht den genau TStreamReader?

Und wie würde man am besten ran gehen zu entpacken?

An alle die 7zipVCL verwenden (scheint wohl <= 0 zu sein ): Wie habt ihr es hingekriegt, etwas zu entpacken? Das es geht, sieht man ja an einem Programm was hier in der DP steht. Aber dort steht eigentlich das was ich habe Aber ohne Erfolg.
Ich habe erraten, dass wenn SZFilename existiert kommt der Opendialog ansonsten nicht. Wäre jetzt nur noch nett zu wissen, was ich dagegen mach muss.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.
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