AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB
Thema durchsuchen
Ansicht
Themen-Optionen

TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

Ein Thema von bernau · begonnen am 22. Apr 2022 · letzter Beitrag vom 22. Apr 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 13:55
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?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:02
Zeig mal etwas Code...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:13
Zeig mal etwas Code...
Ich stelle mal was zusammen.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:14
Also beim TZipFile sehe ich auf die Schnelle keinen Grund wieso es da einen Integerüberlauf geben sollte, da dort mit Int64 gearbeitet wird.
Hatte ich auch erst vermutet, aber - TCustomZStream arbeitet intern nur mit 32-Bit (siehe total_out):
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:15
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.
Ich zeige den Wert von Position

Delphi-Quellcode:
procedure Form1.ZipProgressEvent(aSender: TObject; aFileName: string; aHeader: TZipHeader; aPosition: Int64);
begin
  LabelPosition.caption := aPosition.ToString;
end;
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:25
Ich zeige den Wert von Position
Genau. Und Position wird über ein Seek(0, soCurrent) ermittelt, was in TZCompressionStream das total_in und in TZDecompressionStream das total_out liefert. Das sind aber nur 32-Bit Werte.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:29
TCustomZStream arbeitet intern nur mit 32-Bit (siehe total_out):
Das wird es wohl sein. Dann kann ich mir das Beispiel ja sparen

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.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:31
Kannst du trotzdem bitte einen QP-Report erstellen? Immerhin wirbt Delphi 11 ja mit Zip64-Support.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TZipFile -> TZipProgressEvent -> Position -> Fehler bei Dateien über 4GB

  Alt 22. Apr 2022, 14:45
Kannst du trotzdem bitte einen QP-Report erstellen? Immerhin wirbt Delphi 11 ja mit Zip64-Support.
https://quality.embarcadero.com/browse/RSP-38036

Ist das so verständlich? (Mein erster QP-Report )
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  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 06:35 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