Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sevezip.pas [ISO] (https://www.delphipraxis.net/156177-sevezip-pas-%5Biso%5D.html)

-Phantom- 22. Nov 2010 22:44

Sevezip.pas [ISO]
 
Hey Leute,

wie ihr vielleicht schon mit bekommen habt entwickel ich garde einen Entpacker, der ist schon fast fertig und ich war am testen ob der auch alle Archive entpackt. Dann ist mir aufgefallen das der keine ".iso" Archive entpackt.

In der sevenzip.pas steht das
Delphi-Quellcode:
 
  CLSID_CFormatUdf     : TGUID = '{23170F69-40C1-278A-1000-000110E00000}'; // iso
  CLSID_CFormatIso     : TGUID = '{23170F69-40C1-278A-1000-000110E70000}'; // iso
Es sind 2 unterschiedliche. Aber beide gehen nicht . Er entpackt sie nicht nur, er "öffnet" sie gar nicht erst. Die Dateien können nicht ausgelesen werden, als Fehlermeldung kommt "Unzulässige Funktion"
Bei allen andern Archiv klappt das wie : .rar, .zip, .cab, .lzma, .xpi usw
Ich mache es Folgendermaßen:
Delphi-Quellcode:
    if openend = '.iso' then
    begin
      with CreateInArchive(CLSID_CFormatiso) do
      begin
        Hinzufgen1.Enabled := false;
        sBitBtn3.Enabled := false;
        sBitBtn5.Enabled := false;
        Eigenschaften1.Enabled := false;
        openfile(openpfad);
        i := numberofitems;
        for i := 0 to numberofitems - 1 do
        begin
          inpfad := itempath[i];
          zpfad := StringReplace(inpfad, '/', '\', [rfReplaceAll]);
          datei := Extractfilename(zpfad);
          Item := Dateilist.Items.add;
          Item.Caption := datei;
          Item.SubItems.add(Extractfilename(openpfad) + '/' + inpfad);
          Item.SubItems.add(inttostr(itemsize[i]) + ' B');
          lblag.Caption := inttostr(GetFileSizeA(openpfad) div 1024) + ' KB';
          date1 := CurrentFileTime;
          Item.SubItems.add(datetostr(FileTimeToDateTime(date1)))
        end;
      end;
      lblanzahl.Caption := inttostr(i);
    end;

s.h.a.r.k 22. Nov 2010 22:47

AW: Sevezip.pas [ISO]
 
Und das genaue Problem besteht wo? Dass du von uns nun wissen willst, wie ISO-Dateien entpackt werden können? Oder wo der Fehler in deinem Code steckt?

-Phantom- 22. Nov 2010 22:50

AW: Sevezip.pas [ISO]
 
Wie ich das nun hin bekomme, dass die ISO Archive entpackt werden.

Der Code ist ja richtig, weil die andren Archive damit ausgelesen und entpackt werden können. Hab es nur als Beispiel beigelegt

s.h.a.r.k 22. Nov 2010 22:53

AW: Sevezip.pas [ISO]
 
Wo in deinem Code erscheint denn die Fehlermeldung?
Delphi-Quellcode:
CreateInArchive
ist ja deine eigene Methode und ich vermute stark, dass der Fehler da steckt. Dein Code ist halt für die bisherigen Archive korrekt, nicht aber für das ISO-Format -- davon gehe ich im Moment eben aus.

-Phantom- 22. Nov 2010 22:56

AW: Sevezip.pas [ISO]
 
Es ist ne Laufzeit Fehlermeldung. Es kommt wenn ich versuche die ISO zu öffnen

// wieso ist das meine Methode? Die kommt von der sevenzip.pas

s.h.a.r.k 22. Nov 2010 22:58

AW: Sevezip.pas [ISO]
 
Wow... Du hilfst uns ja nicht gerade viel ;) Schau doch einfach mal in welcher Zeile genau der Fehler auftritt. Setz halt mal einen Haltepunkt an die
Delphi-Quellcode:
CreateInArchive
Methode und gehe dann, sobald der Punkt erreicht ist, mit F7 weiter bis der Fehler auftritt.

Zudem wäre es interessant zu wissen, wie denn die Methode
Delphi-Quellcode:
CreateInArchive
aussieht, in so fern darin der Fehler steckt.

-- EDIT
Wenn irgendwas unklar ist, was ich hier gerade schreiben, dann gib bescheid.

-Phantom- 22. Nov 2010 23:00

AW: Sevezip.pas [ISO]
 
Haltepunkt sagt mir nichts

Zitat:

function CreateInArchive(const classid: TGUID): I7zInArchive;
begin
Result := T7zInArchive.Create('7z.dll');
Result.ClassId := classid;
end;

s.h.a.r.k 22. Nov 2010 23:06

AW: Sevezip.pas [ISO]
 
Jetzt gilt es zu klären, ob die 7zip-DLL auch ISO-Dateien öffnen kann. Das weiß ich eben nicht.

So, dann mal ein kleiner Crash-Kurs in Sachen Debugging: Wenn du mit dem Cursor in einer Zeile bist, dann kannst du durch drücken der F5-Taste einen Haltepunkt setzen. Diese Zeile erscheint dann rot, zudem ist ein roter Punkt links vom Editor-Feld. Startest du die Anwendung mit dem Debugger F9, dann läuft dein Programm bis zu diesem Haltepunkt und springt dann in die IDE. Dort kannst du dann mit F7 und F8 weiterspringen. Hoverst du mit der Maus über eine Variable, siehst du deren Inhalt in einem Hint. Ebenso kannst du so feststellen, in welcher Zeile genau der Fehler auftritt, da du via F7 ja von Zeile zu Zeile springst. Das ist nur eine sehr minimale Beschreibung! Ich rate dir mal dieses Tutorial zu lesen!

-Phantom- 22. Nov 2010 23:11

AW: Sevezip.pas [ISO]
 
Danke. Wenn ich dann f8 drücke. Komme ich bis zu
Delphi-Quellcode:
  i := numberofitems;
dann erscheint wieder "Unzulässige Funktion"

Mit f7 komme ich bis zu
Zitat:

procedure RINOK(const hr: HRESULT);
begin
if hr <> S_OK then
raise Exception.Create(SysErrorMessage(hr));
end

lbccaleb 22. Nov 2010 23:16

AW: Sevezip.pas [ISO]
 
Das heißt, der Fehler tritt eine Zeile vorher auf, die da währe:

Delphi-Quellcode:
openfile(openpfad);
Ist also wohl so, dass er das Format nicht erkennt!
Vllt ist es auch eine andere Version, bzw ein ISO-Image und keine gepackte Datei?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr.
Seite 1 von 4  1 23     Letzte »    

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