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 1 von 3  1 23   
Benutzerbild von xZise
xZise

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

7-zip Entpacker einbinden

  Alt 15. Feb 2008, 17:17
Moin DP,
ich habe eine Frage zu 7-zip: Bisher habe ich nur exen gefunden, welche Entpacken, aber ich würde gerne das als Delphi Komponente haben, so dass ich einen Fortschrittsbalken anzeigen kann.
Dabei muss diese Komponente mind. 7z, rar und zip entpacken können.

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

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

Re: 7-zip Entpacker einbinden

  Alt 15. Feb 2008, 17:39
Bei Meiner 7Zip Oberfläche die ich mit Lazarus erstellt habe, mache ich das einfach so:
Ich rufe zur Laufzeit einfach die Anwendung 7Z auf und Parse dann die Programm Ausgabe.

Und das mache ich in einem Extra Thread...
Hier sind einige Links für dich:
http://www.7-zip.org/sdk.html und
http://www.birtles.org.uk/programming/

und eine Komponente:
http://www.torry.net/quicksearchd.ph...nzip&Title=Yes
dort musst du nach SevenZipVCL_074 suchen.
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
 
#3

Re: 7-zip Entpacker einbinden

  Alt 26. Feb 2008, 15:29
Also ich habe mich mal dran versucht, und bin dran gescheitert

Und zwar habe ich folgendes Problem:
Delphi-Quellcode:
sevenZip := TSevenZip.Create(self);
try
  sevenZip.SFXCreate := False;
  sevenZip.SFXModule := '7z.sfx';
  sevenZip.AddOptions := [AddRecurseDirs];
  sevenZip.ExtractOptions := [];
  sevenZip.LZMACompressType := LZMA;
  sevenZip.LZMACompressStrength := NORMAL;
  sevenZip.LZMAStrength := 0;
  sevenZip.ExtrBaseDir := bufferPath;
//sevenZip.LPPMDmem := 0;
//sevenZip.LPPMDsize := 0;
  sevenZip.NumberOfFiles := -1;
  sevenZip.VolumeSize := 1000000;
  sevenZip.OnProgress := SevenZipProgress;

  sevenZip.SZFileName := FUpdateInformation[FArchiveIdx * 3];
  sevenZip.Extract;
finally
  FreeAndNil(sevenZip);
end;
Wenn ich nun ".Extract" oder ".List" aufrufe, zeigt er einen OpenDialog an. kA warum?!

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

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

Re: 7-zip Entpacker einbinden

  Alt 26. Feb 2008, 18:11
ich habe damit nie was gemacht da es für Delphi ist....

Aber schau doch mal nach was sevenZip.SZFileName macht. Ich wette das ist eine Eigenschaft ein Property.
Ich könnte mir vorstellen das er den Dateinamen nicht findet oder so.
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
 
#5

Re: 7-zip Entpacker einbinden

  Alt 26. Feb 2008, 19:13
Hi mimi
Naja: Ich habe den Wert des Ausdrucks kopiert und im Windows Explorer kopiert, welcher das öffnen konnte.

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

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

Re: 7-zip Entpacker einbinden

  Alt 26. Feb 2008, 19:36
Also geht die Datei oder wie ? Also das Archiv was du entpacken möchtest ?
ich dachte an:
sevenZip.SZFileName := FUpdateInformation[FArchiveIdx * 3];
evlt. musst du ganze Pfad angaben machen. lasse dir mal ausgeben was in
FUpdateInformation[FArchiveIdx * 3] drin steht.... ob da eine ganze Pfad Angebe drin steht also:
c:\testdir\testfile.txt
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
 
#7

Re: 7-zip Entpacker einbinden

  Alt 26. Feb 2008, 19:43
Also darin steht genau die Datei die ich entpacken möchte.
Nun habe ich den Code debuggt, und komme da an diese Stelle:
Delphi-Quellcode:
function TSevenZip.Extract( TestArchive:Boolean=False ): Integer;
var
  updateCallback: TMyArchiveExtractCallback;
  updateOpenCallback: TmyArchiveOpenCallback;
  ms: TMyStreamReader;
  filesDW: array of DWORD;
  Filestoex,w: DWORD;
  i,j,n: Integer;
  FMaxProgress:int64;
  size: PROPVARIANT;
// fnameprop: PROPVARIANT;
// fileInArchive, fileToExtract: WideString;

begin
try
// 24.08.06 - Matteo Riso - Status: experimental
// 25.08.06 Modified by rg
//
// If we loaded an .EXE file, we could start reading from offset 132096.
// Also supported by newerdll

// if FIsSFX then ms.Seek( FSFXOffset,0,@FSFXOffset );

// End - MR modification

// Shadow 28.11.2006
    if UppercaseW_( ExtractFileExtW( FSevenZipFileName ) ) = '.EXEthen begin
      if not SFXCheck( FSevenZipFileName ) then begin
        Result := -1;
        ErrCode:=FNoSFXarchive; //FHO 21.01.2007
        if assigned( onMessage ) then
          onMessage( self, FNoSFXarchive, c7zipResMsg[FNoSFXarchive], Fsevenzipfilename );
        Exit;
      end;
    end;

    ms := TMyStreamReader.Create( Self, FSevenZipFileName, TRUE );
    inA.Close;

    updateOpenCallback := TMyArchiveOpenCallback.Create( self );
    i := inA.Open( ms, nil, updateOpenCallback );
  [...]
Bei inA.Open zeigt er dann das Fenster an.
Was genau er da macht ist ziemlich verwirrend dann

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

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

Re: 7-zip Entpacker einbinden

  Alt 26. Feb 2008, 19:57
anscheind nimmst du die Falsche Methode. Das sieht für mich so aus als ob da so ein Open Dialog kommen soll. das ist also vorgesehen von den Entwicklern. Aber welche Funktion du noch nehmen kannst weiß ich nicht. es gibt noch noch extract Optionen hast du die schon probiert ?

schau doch mal nach was
inA: IInArchive;
Geanu IInArchive ist. könnte ein Interface sein. Ich habe auf meiner Platte auch noch SevenZip.

Also ich weiß im Moment nicht weiter.

edit
Delphi-Quellcode:
procedure TForm1.extractarchiveClick(Sender: TObject);

var i : integer;

begin

//select extract dir

 sevenzip1.ExtrBaseDir := 'c:\7ztest';



//Overwrite existing files during extrect ?

 sevenzip1.ExtractOptions := sevenzip1.ExtractOptions + [ExtractOverwrite];



//Clear Extractlist - for all files do nothing else

 sevenzip1.Files.clear;



 if listview1.SelCount > 0 then

  for i := 0 to listview1.Items.Count -1 do

     if listview1.Items[i].Selected then

       sevenzip1.Files.AddString(listview1.Items[i].SubItems[6]);



//extract files

 i := sevenzip1.Extract;



// Show result

 label1.caption := inttostr(i);

end;
so machen die das im demoe... fürs Entpacken. Evlt. musst du erst eine liste mit Dateien füllen die du Entpacken möchtest !
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
 
#9

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 13:53
Naja, ich habe mir mal die Demo angesehen, und irgendwie ist diese Komponente so arg statisch!

Und zwar, wenn man ein Archiv öffnen möchte, muss man auf "List Archive" klicken. Diese ruft aber wiederrum ".List" auf, welche wiederrum einen OpenDialog anzeigt?!
Und mithilfe von ".List" wird das Ereigniss "ListProgress" oder so aufgrufen, wo dann endlich die FileIndexes stehen, welche ich dann der FilesListe hinzufügen könnte.

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

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

Re: 7-zip Entpacker einbinden

  Alt 2. Mär 2008, 14:14
Dann bleibt dir nur eine Möglichkeit übrig: Du musst das Programm 7z mit Parametern Starten.

Ich meine für Windows sollte es auch eine Kommandozeilen Anwendung da sein.

Dazu könntest du dir unter www.lazarusforum.de meine 7Zip Oberfläche anschauen.

Evlt. Hilft das ja. Ist zwar nicht die schöne art, aber es geht und unter Linux habe ich gehört ist das die gäng ste "sache" einfach auf externe Programm zu zurückzugreifen. Für Windows zwar nicht, sollte aber auch gehen.

Wenn du dort nicht angemeldet bist kann ich dir mein Projekt auch gerne per PM senden oder an mein nächsten Beitrag hängen.

Es ist aber nur für Lazarus. Sollte aber Trotzdem zum nach schauen Hilfreich sein.

Wenn du möchtest könnte ich auch draus ein Klasse erstellen, die auf das 7Z Programm zu zurückgreift.
Ich hoffe du weißt wie ich das meine.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

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 16:07 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