Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi System.Zip Entpacken einer Datei (https://www.delphipraxis.net/214543-system-zip-entpacken-einer-datei.html)

zeras 26. Jan 2024 16:10

System.Zip Entpacken einer Datei
 
Ich nutze folgende Funktion, um eine Datei aus einer Zipdatei zu entpacken. Das klappt in den meisten Fällen gut, aber bei verschiedenen Zip-Dateien kommt die Meldung "Die angegebene Datei wurde nicht gefunden xxxx/xxxx/xxx".
Oder kann es sein, dass System.Zip nicht alle Zipversionen kennt?
Die Datei, die ich suche, liegt in einem Unterpfad.
Wenn ich eine andere Datei extrahieren will, die in der Root der Zipdatei liegt, gibt es keine Problem.
Wenn ich aber die Funktion Zip.ExtractAll nutze, wird die Datei neben allen anderen Dateien sauber extrahiert.
Nun wollte ich in System.Zip debuggen. Aber da hält der Debugger nicht an. Kann es damit zu tun haben, dass System.Zip scheibgeschützt unter den Programm Files liegt?

Delphi-Quellcode:
  Result := false;
  Zip := TZipFile.Create;
  try
    try
      Zip.Open(SrcfName, zmRead);

      if fNames2Extract.Count > 0 then begin
        for I := 0 to fNames2Extract.Count -1 do begin
          s := StringReplace((fNames2Extract[i]), '\', '/', [rfReplaceAll]); //231012-01

          //231012-01
          //Wenn Datei nicht existiert, müssen wir das mit abfangen
          try
            Zip.Extract(s, DstDir, false); //Original
          except

            on E: Exception do
              begin
                ShowMessage(E.Message + '"' + s + '"'); //211107-01
                raise;
              end;
          end;
        end;
      end;
      result := true;
    except
      ShowMessage('Fehler bei EntzipOneFile');
    end;
    Zip.Close;
  finally
    Zip.Free;
  end;

Uwe Raabe 26. Jan 2024 16:29

AW: System.Zip Entpacken einer Datei
 
Zitat:

Zitat von zeras (Beitrag 1532618)
Nun wollte ich in System.Zip debuggen. Aber da hält der Debugger nicht an.

Hast du denn auch "Mit Debug-DCUs" in den Compiler-Optionen aktiviert?

zeras 26. Jan 2024 16:37

AW: System.Zip Entpacken einer Datei
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1532620)
Zitat:

Zitat von zeras (Beitrag 1532618)
Nun wollte ich in System.Zip debuggen. Aber da hält der Debugger nicht an.

Hast du denn auch "Mit Debug-DCUs" in den Compiler-Optionen aktiviert?

Danke für den Hinweis. Jetzt kann ich weiter debuggen.

zeras 26. Jan 2024 17:11

AW: System.Zip Entpacken einer Datei
 
Liste der Anhänge anzeigen (Anzahl: 2)
Das Debuggen in der System.Zip wird wohl sehr schwierig werden. Das werde ich wohl nicht hinbekommen.
Was ich gesehen habe, ist dass im Header unterschiedliche Werte stehen bei Dateien, wo es geht und Dateien, wo es nicht geht, siehe Anhänge.
Vielleicht hat einer der Spezialisten hier eine Info, ob man mit den Headerdaten schon sieht, wo es klemmt.
Das erste Bild zeigt den Header der Problemdatei. Dort ist der Wert "MadeByVersion" anders als in der Datei, wo es geht.

mytbo 26. Jan 2024 17:42

AW: System.Zip Entpacken einer Datei
 
Zitat:

Zitat von zeras (Beitrag 1532618)
Oder kann es sein, dass System.Zip nicht alle Zipversionen kennt?

Oder mal mit mORMot testen:
Delphi-Quellcode:
uses
  mormot.core.base,
  mormot.core.os,
  mormot.core.zip;

begin
  var zipRead: TZipRead := TZipRead.Create(zipFileName);
  try
    var idx: Integer := zipRead.NameToIndex(fileNameToSearch);
    if (idx >= 0)
      and zipRead.UnZip(idx, ...) then
    begin
    end;
  finally
    zipRead.Free;
  end;
Bis bald...
Thomas

zeras 27. Jan 2024 06:51

AW: System.Zip Entpacken einer Datei
 
Danke mytbo, aber ich hatte erst von Delphizip auf interne Funktionen umgestellt, da Delphizip meines Wissens nicht mehr weiterentwickelt wurde. Das wäre natürlich später eine Möglichkeit, wenn die internen dann noch nicht gehen.

Ich habe nun einmal die System.Zip lokal in mein Testprojekt kopiert und diese zu Debuggen genommen. Dabei ist mir aufgefallen, dass es Unterschiede in der Speicherung der einzelnen Dateien innerhalb der Zipdatei gibt.
Bei den Zipdateiten, wo es nicht funktioniert, ist das Trennzeichen ein Backslash, bei den Zipdateien, wo es funktioniert, ein normaler Slash.
Nun stellt sich für mich die Frage, ob das Zipprogramm (ich weiß nicht, wie die Dateien gezipt wurden) nicht nach Vorgabe zusammenpackt, oder ob Delphi hier nicht nach Solldefinition auspackt.
Ich könnte bestimmt die System.Zip ändern, aber das wäre nur eine Notlösung.

Darf man hier eine Zeile oder zwei aus der System.zip zeigen, wie es funktionieren könnte?
Wenn ich in der Funktion TZipFile.IndexOf die Backslahes durch Slashes ersetze, geht es erst einmal.

Uwe Raabe 27. Jan 2024 10:06

AW: System.Zip Entpacken einer Datei
 
Wäre es möglich eine Beispiel-Zip zu erstellen, die wir hier zum Testen verwenden können?

TurboMagic 27. Jan 2024 13:51

AW: System.Zip Entpacken einer Datei
 
Uwe, hattest du nicht mal irgendwo die URL der ZIP-Spezifikation?
Evtl. steht da was zu dieser Trennzeichengeschichte drin?

Uwe Raabe 27. Jan 2024 14:31

AW: System.Zip Entpacken einer Datei
 
https://pkware.cachefly.net/webdocs/...es/APPNOTE.TXT

TurboMagic 27. Jan 2024 16:59

AW: System.Zip Entpacken einer Datei
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1532669)

:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 Uhr.
Seite 1 von 2  1 2      

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