![]() |
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; |
AW: System.Zip Entpacken einer Datei
Zitat:
|
AW: System.Zip Entpacken einer Datei
Zitat:
|
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. |
AW: System.Zip Entpacken einer Datei
Zitat:
![]()
Delphi-Quellcode:
Bis bald...
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; Thomas |
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. |
AW: System.Zip Entpacken einer Datei
Wäre es möglich eine Beispiel-Zip zu erstellen, die wir hier zum Testen verwenden können?
|
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? |
AW: System.Zip Entpacken einer Datei
|
AW: System.Zip Entpacken einer Datei
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz