Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ENtpacken von .rar (https://www.delphipraxis.net/132532-entpacken-von-rar.html)

_frank_ 18. Apr 2009 13:20

Re: ENtpacken von .rar
 
ohne zu testen nur anhand der doku:

Delphi-Quellcode:
uses rar; //rar-unit einbinden
var rarfiile:TRar;
begin
  rarfile:=TRar.create(self); //Objekt erstellen
  rarfile.OpenFile('C:\test.rar'); //Archiv öffnen
  rarfile.Extract('C:\temp\',true,nil); //entpacken
  rarfile.free;//objekt freigeben
end;
//tipfehler korrigiert ;)

HTH Frank

Phil125 18. Apr 2009 14:02

Re: ENtpacken von .rar
 
Bis auf einen kleinen Tippfehler suuuuuuuper danke man du hast mich gerettet

whiteF 30. Apr 2011 00:23

AW: ENtpacken von .rar
 
hi, das thema ist zwar etwa angestaubt, aber ich versuchs dennoch^^ (habe Delphi XE)

eigentlich ist diese komponente ja ziemlich einfach und schlicht, aber irgendwie komm ich da nicht weiter...

ich habe jetzt folgendes:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
RAR1:=RAR1.create(self); //Objekt erstellen
if OpenDialog1.Execute then begin
showmessage(OpenDialog1.FileName);
      if RAR1.OpenFile(OpenDialog1.FileName) then begin
         showmessage(BoolToStr(RAR1.OpenFile(OpenDialog1.FileName)));
end;
showmessage('Nach if:' + BoolToStr(RAR1.OpenFile(OpenDialog1.FileName)));
end;
RAR1.free;
end;
Lt. der Doku der Unit müsste Rar1.openfile einen Boolwert zurückgeben (wenn alles glatt läuft mit dem archiv).
Mir wird hier: showmessage(BoolToStr(RAR1.OpenFile(OpenDialog1.Fi leName)));
der Wert 0 zurück geliefert.
Wenn ich diesen kleinen showmessage-test in die demo der unit einbaue, kommt wie in der doku beschrieben der wert TRUE.
der aufbau der demo, weicht eigentlich außer ein paar befehle zum listbox adden nicht ab.

woran könnte das denn liegen?
in der uses ist "rar" vorhanden, genauso wie type RAR1: TRAR;

mfg

sx2008 30. Apr 2011 00:43

AW: ENtpacken von .rar
 
Du rufst RAR1.OpenFile(OpenDialog1.FileName) zweimal auf.
Das wäre so wie wenn du deine Haustür zweimal aufschliesen würdest und beim zweiten Mal lässt sich der Schlüssel nicht mehr drehen.
In Delphi kann man ja lokale Variablen anlegen und man sollte davon auch regen Gebrauch machen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  opened : Boolean;
  filename : string;
begin
  if not OpenDialog1.Execute then
    Exit;
  filename := OpenDialog1.FileName;

  RAR1:=RAR1.create(self); //Komponente erstellen
  try
    opened := RAR1.OpenFile(filename);
    if not opened then
      ShowMessageFmt('Archiv %s konnte nicht geöffnet werden', [filename]);
    else
      ShowMessageFmt('Archiv %s geöffnet', [filename]);

  finally
    FreeAndNil(RAR1);
  end;
end;

Aphton 30. Apr 2011 00:52

AW: ENtpacken von .rar
 
die Zeile hier ist vermutlich auch falsch
Delphi-Quellcode:
RAR1:=RAR1.create(self);
//----^
("vermutlich", weil... für den Fall, dass du ne eigene Klasse mit dem Namen "RAR1" geschrieben hast, die von TRar erbt und dich nicht an die Konvention mit "T" gehalten hast!)

whiteF 30. Apr 2011 01:09

AW: ENtpacken von .rar
 
das ging aber schnell....
danke für die raschen antworten,
aber leider bekomm ich mit sx2008's lösung nur "dass das archiv nicht geöffnet werden kann"
dass ich 2 mal die Haustür aufschließe stimmt so nicht ganz, "if RAR1.OpenFile(OpenDialog1.FileName) then begin" wird ja gar nicht ausgelöst... das ist ja das problem! (Ergebnis ist ja 0 und nicht TRUE)

rar1.create brauch ich nicht, hast recht, hab ja schon die komponente auf der Form.^^
Habs aus verzweiflung mal mit ausprobiert gehabt.

hab jetzt mal das ausprobiert....

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var filepath : string;
begin
if OpenDialog1.Execute then begin
filepath := OpenDialog1.FileName;
showmessage(filepath);
      if RAR1.OpenFile(filepath) then begin
         showmessage(BoolToStr(RAR1.OpenFile(filepath)));
end;
showmessage('Nach if:' + BoolToStr(RAR1.OpenFile(filepath)));
end;
RAR1.free;
end;
filepath = OpenDialog1.FileName wird auch korrekt wiedergegeben (bei mir: "C:\1\b.rar" das muss doch so stimmen :cry:)

ich raffs einfach nicht^^ die demo läuft doch auch :roll:

habt ihr Delphi XE und auch diese komponente "UnRAR Delphi component - Delphi component wrapper for UnRar.dll by Philippe Wechsler." ?

pixfreak 30. Apr 2011 08:03

AW: ENtpacken von .rar
 
Moin und ganz ruhig....

Du bekommst die Meldung 0 zurück, und ich denke, es ist ok.

Delphi-Quellcode:
if RAR1.OpenFile(OpenDialog1.FileName) then begin

         showmessage(BoolToStr(RAR1.OpenFile(OpenDialog1.FileName)));
Ich hab Dir mal eine Leerzeile in Deinen Code eingefügt. Vielleicht wird es jetzt schon klarer...

Was passiert: In der ersten Zeile öffnest Du mit dem RAR1 Objekt mit OpenFile eine Datei. Dieser Befehl hat Erfolg, denn er liefert Dir true zurück. Und genau dann wenn die if Bedingung wahr ist, also true, wird der Befehl hinter then ausgeführt (hier Dein begin - end Block). Und dort öffnest Du zum zweiten mal eine Datei, obwohl noch eine offen ist, und das gibt diesmal false bzw. 0 und die Message Box wird angezeigt.

Mach doch mal folgendes:

Delphi-Quellcode:
if RAR1.OpenFile(OpenDialog1.FileName) then
   ShowMessage("Erfolg!")
else
   ShowMessage("Fehler!");

Ich hoffe, ich konnte helfen...


VG Pixfreak

whiteF 30. Apr 2011 09:22

AW: ENtpacken von .rar
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var filepath : string;
begin
if OpenDialog1.Execute then begin
filepath := OpenDialog1.FileName;
showmessage(filepath);
      if RAR1.OpenFile(filepath) then
      ShowMessage('Erfolg!')
      else
      ShowMessage('Fehler!');
end;
RAR1.free;
end;
= Fehler


auch nur das hier gibt mir 0 zurück
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(BoolToStr(RAR1.OpenFile('C:\1\b.rar')));
RAR1.free;
end;
= 0

pixfreak 30. Apr 2011 14:29

AW: ENtpacken von .rar
 
Ohne die Komponente zu kennen. Hat die vielleicht ein Error Property wo man mehr über den misslungenen Versuch erfahren kann?

Zugriffsrechte auf das Verzeichnis?


VG Pixfreak


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.
Seite 2 von 2     12   

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