![]() |
System.Zip Countfiles
Ich möchte die Anzahl der Dateien in einer Zipdatei ermitteln, damit ich beim Auspacken den Fortschritt anzeige.
Leider gibt es Differenzen, wenn man die Datei mit 7Zip auspackt mit dem Explorer dann die Anzahl anzeigen läßt. In dieser Funktion unten werden offenbar Datei und Verzeichnisse gezählt. Ich habe aber keine Funktion gefunden, wo nur Dateien gezählt werden. Hat jemand eine Idee?
Delphi-Quellcode:
Result := 0;
Zip := TZipFile.Create; try try Zip.Open(SrcfName, zmRead); result := Zip.FileCount; Zip.Close; |
AW: System.Zip Countfiles
Damit kannst du keine sinnvolle Fortschrittsanzeige machen, weil unterschiedlich große Dateien unterschiedlich lange dauern. Dafür gibt es das OnProgress-Event:
![]() |
AW: System.Zip Countfiles
Zitat:
Am Ende möchte ich aber einen Vergleich machen, ob die Anzahl der extrahierten Dateien auch mit der Anzahl in der Zipdatei übereinstimmt. Dies ist für mehr Sicherheit. |
AW: System.Zip Countfiles
Zitat:
Ansonsten kannst du nur beim Auspacken mitzählen. Einen Zähler für die Dateien gibt es meines Wissens nicht. |
AW: System.Zip Countfiles
Liste der Anhänge anzeigen (Anzahl: 1)
Ich mache das so wie im Bild. Den Wert hinter "von" hole ich mir vorab von der Zipfunktion "Zip.FileCount". Am Ende sollte ja beispielsweise 999 von 999 sein.
Das angehängte Bild zeigt den Zustand, wo die Zipdatei komplett ausgepackt ist. Die Differenz zwischen links und rechts sind dann offenbar die Ordner. Jedenfalls zeigt es dann der Explorer so an. Rechts davon habe ich eine Progressbar, was dann bei größeren Dateien den Fortschritt anzeigt. |
AW: System.Zip Countfiles
Ich habe das jetzt so zusammen mit ChatGPT gelöst und denke, dass dies auch in den Quellen bei Emba geändert werden sollte.
Wenn ich nach Dateien frage, dann möchte ich keine Pfade mitgezählt haben.
Delphi-Quellcode:
function GetCountFilesOfZipfilesNew(Srcfname: string): integer;
const IgnoredAttributes = faHidden + faSysFile + faDirectory; var Zip: TZipFile; I: Integer; s: String; begin Result := 0; Zip := TZipFile.Create; try try Zip.Open(SrcfName, zmRead); for I := 0 to Zip.FileCount - 1 do begin if (Zip.FileInfo[I].ExternalAttributes and IgnoredAttributes) = 0 then Inc(Result); end; except on E: EZipException do ShowMessage('Zip-Fehler: ' + E.Message); on E: EStreamError do ShowMessage('Stream-Fehler: ' + E.Message); on E: Exception do ShowMessage('Allgemeiner Fehler: ' + E.Message); end; finally Zip.Free; end; end; |
AW: System.Zip Countfiles
Zitat:
Delphi-Quellcode:
const
IgnoredAttributes = faHidden or faSysFile or faDirectory; |
AW: System.Zip Countfiles
Zitat:
|
AW: System.Zip Countfiles
Solange die zu kombinierenden Zahlen Potenzen von 2 sind und man sie garantiert nur einmal hinzufügt, gibt es auch kein Problem. Aber vergleich doch einmal
Delphi-Quellcode:
mit
// faDirectory versehentlich doppelt
faHidden + faSysFile + faDirectory + faDirectory
Delphi-Quellcode:
// faDirectory versehentlich doppelt
faHidden or faSysFile or faDirectory or faDirectory |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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