AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

System.Zip Entpacken einer Datei

Ein Thema von zeras · begonnen am 26. Jan 2024 · letzter Beitrag vom 30. Jan 2024
Antwort Antwort
Seite 1 von 2  1 2      
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#1

System.Zip Entpacken einer Datei

  Alt 26. Jan 2024, 17:10
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;
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.459 Beiträge
 
Delphi 12 Athens
 
#2

AW: System.Zip Entpacken einer Datei

  Alt 26. Jan 2024, 17:29
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#3

AW: System.Zip Entpacken einer Datei

  Alt 26. Jan 2024, 17:37
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#4

AW: System.Zip Entpacken einer Datei

  Alt 26. Jan 2024, 18:11
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.
Miniaturansicht angehängter Grafiken
nok.png   ok.png  
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#5

AW: System.Zip Entpacken einer Datei

  Alt 26. Jan 2024, 18:42
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

Geändert von mytbo (26. Jan 2024 um 18:45 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#6

AW: System.Zip Entpacken einer Datei

  Alt 27. Jan 2024, 07:51
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras (27. Jan 2024 um 08:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.459 Beiträge
 
Delphi 12 Athens
 
#7

AW: System.Zip Entpacken einer Datei

  Alt 27. Jan 2024, 11:06
Wäre es möglich eine Beispiel-Zip zu erstellen, die wir hier zum Testen verwenden können?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#8

AW: System.Zip Entpacken einer Datei

  Alt 27. Jan 2024, 14:51
Uwe, hattest du nicht mal irgendwo die URL der ZIP-Spezifikation?
Evtl. steht da was zu dieser Trennzeichengeschichte drin?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.459 Beiträge
 
Delphi 12 Athens
 
#9

AW: System.Zip Entpacken einer Datei

  Alt 27. Jan 2024, 15:31
https://pkware.cachefly.net/webdocs/...es/APPNOTE.TXT
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#10

AW: System.Zip Entpacken einer Datei

  Alt 27. Jan 2024, 17:59
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:43 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