Autor Beitrag
Blamaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: Fr 03.10.08 19:45 
Hi,

ich habe momentan ein Problem mit der DFunrar Komponente.

Ich möchte gernen ein kleines Entpack Tool programmieren, welches eine Passwortliste mit den Passwörtern abarbeitet die ich am häufigsten benutze, bzw. bekomme.

Nun hab ich mich als an der Kompo versucht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.FormCreate(Sender: TObject);
begin
  I := -1;
  Liste := Tstringlist.Create;
  Liste.Add('test');
  Liste.Add('test1');
  Liste.Add('test2');
  Liste.Add('test3');
  Liste.Add('test4');
  Liste.Add('test5');
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Unrar;
begin
  dfUnRar1.FileList.Clear;
  dfUnRar1.FileName := DateiPfad; //Quellverzeichnis
// dfUnRar1.FileList.Add('');   //zu entpackende Datei
  dfUnRar1.OverrideEvent := OR_ALWAYS;
  dfUnRar1.Directory := SpeicherPfad + '\'//Zielverzeichnis
  dfUnRar1.Mode := DFRAR_EXTRACT;
  dfUnRar1.Extract;
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.DFUnRar1Password(Sender: TObject; var Password: string);
begin
  if Edit1.Text = '' then
  begin
    Inc(I);
    Password := Liste.Strings[I];
  end
  else
    Password := Edit1.Text;
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.DFUnRar1Error(Sender: TObject; Messagestring;
  MessageID: Integer);
begin
  ShowMessage(Message);
  StatusBar1.SetTextBuf(Pchar(Message));
  DfUnrar1.StopProcessing := true;
  if ((Message = 'Fehlerhafte Daten'or (Message = 'Datei-Header defekt')) and (Edit1.Text = ''then
  begin
    Unrar;
  end;
end;


Das Tool funktioniert soweit auch ganz gut, jendenfalls solange man das Passwort per Hand eingibt. Wenn er nun aber die Liste durcharbeiten soll und an die Stelle mit dem richtigen Passwort kommt, gibt es beim entpacken eine Zugriffsverletzung in der Unrar.dll.
Die Datein sind allerdings danach trotzdem entpackt.

Nun würde mich interessieren woher der Fehler kommt, ich vermute mal durch die Tstringlist kann mir aber nicht erklären warum.

Ich hoffe mir kann jemand helfen :wink:

(Im anhang mal mein Code inkl einer gerarten Textdatei mit dem Passwort "test3" (DfUnrar Komponente wird benötigt!))

mfg Blamaster
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.10.08 18:13 
Das dürfte an deiner seltsamen Konstruktion liegen in OnError statt nur einen Fehler anzuzeigen erneut einen Unrar-Vorgang zu starten. So wird das Arschiv mehrfach versucht zu schließen...

Denn du stößt in OnError, das ja noch während der Operation angestoßen wird, einen weiteren Entpackvorgang an. Am Ende dieses Vorgangs wird dann das Archiv auch geschlossen, nach dem Abschluss der OnError-Ereignisbehandlung innerhalb der vorhergehenden Entpackvorgänge passiert das aber erneut...

OnError ist eben nur zur Fehleranzeige und -auswertung da. Du wirst dein Konzept überdenken müssen.