![]() |
TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Ich teste grade TZipFile, weil ich Dateien >4GB komprimieren muss. Klappt soweit auch wunderbar.
Allerdings gibt es ein Problem wenn ich den Fortschritt anzeigen lassen möchte. Ich verwende das Event "OnProgress: TZipProgressEvent". Im Parameter "Position" wird die aktuelle Position der grade zu komprimierenden Datei angegeben. Es gibt aber ein Problem ab 4,2GB, dann wird die Position wieder auf 0 gesetzt und zählt dort weiter. Kann jemand den Fehler nachvollziehen? |
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Zeig mal etwas Code...
|
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Wie zeigst du es an? Mit TProgressbar? Also beim TZipFile sehe ich auf die Schnelle keinen Grund wieso es da einen Integerüberlauf geben sollte, da dort mit Int64 gearbeitet wird. Ich würde deswegen eher auf deine Anzeigekomponente tippen, die eventuell nur Integerwerte nutzen kann. Dann wäre es wohl besser, wenn du da nur Prozentangaben zeigst.
|
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Zitat:
|
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Zitat:
Delphi-Quellcode:
z_stream = record
next_in: PByte; // next input byte avail_in: Cardinal; // number of bytes available at next_in total_in: LongWord; // total nb of input bytes read so far next_out: PByte; // next output byte will go here avail_out: Cardinal; // remaining free space at next_out total_out: LongWord; // total nb of bytes output so far msg: MarshaledAString; // last error message, NULL if no error state: Pinternal_state; // not visible by applications zalloc: alloc_func; // used to allocate the internal state zfree: free_func; // used to free the internal state opaque: Pointer; // private data object passed to zalloc and zfree data_type: Integer; // best guess about the data type: binary or text // for deflate, or the decoding state for inflate adler: LongWord; // Adler-32 or CRC-32 value of the uncompressed data reserved: LongWord; // reserved for future use end; |
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Zitat:
Delphi-Quellcode:
procedure Form1.ZipProgressEvent(aSender: TObject; aFileName: string; aHeader: TZipHeader; aPosition: Int64);
begin LabelPosition.caption := aPosition.ToString; end; |
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Zitat:
Delphi-Quellcode:
ermittelt, was in TZCompressionStream das total_in und in TZDecompressionStream das total_out liefert. Das sind aber nur 32-Bit Werte.
Seek(0, soCurrent)
|
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Zitat:
Der Bereich von LongWord (0 .. 4294967295) passt ja zu den 4,2 GB. Nun ja. Solange die ZIP-Datei nicht fehlerhaft ist, kann ich noch damit leben. Den Progress kann ich wohl mit ein paar Tricks umschiffen. |
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Kannst du trotzdem bitte einen QP-Report erstellen? Immerhin wirbt Delphi 11 ja mit Zip64-Support.
|
AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Zitat:
![]() Ist das so verständlich? (Mein erster QP-Report :oops: ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 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