Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: TWin32FindData: Dateigröße bestimmen

  Alt 4. Okt 2016, 17:33
Groesse := (wfd.nFileSizeHigh * (MAXDWORD)) + wfd.nFileSizeLow;
Ist die Berechnung falsch?
JA

Delphi erweitert Typen automatisch nur auf 32 Bit, solange alle Typen maximal 32 Bit sind, mit dem selben Vorzeichen (SIGNED- und UNSIGNED-Typen)

Das macht der Compiler aus deinem Code:
Groesse := (LongWord(wfd.nFileSizeHigh) * LongWord(MAXDWORD)) + LongWord(wfd.nFileSizeLow);

Aber du willst ja eher
Groesse := (UInt64(wfd.nFileSizeHigh) * LongWord(MAXDWORD)) + LongWord(wfd.nFileSizeLow);
[edit] Natürlich auch das MAXDWORD+1 beachten ... siehe Vorredner

Oder besser noch
Groesse := (UInt64(wfd.nFileSizeHigh) shl 32) or wfd.nFileSizeLow;

Int64 oder UInt64, jenachdem wie Groesse deklariert ist (aber es sollte natürlich eher UInt64 sein)

PS: In deinem Fall hättest du den Typ-Fehler sofort gefunden, wenn du in den Projektoptionen einmal die Bereichsprüfung Überlaufprüfung aktiviert hättest.

PS2: Man könnte auch Casten, statt rechnen/schieben -> Int64Rec oder LARGE_INTEGER
$2B or not $2B

Geändert von himitsu ( 4. Okt 2016 um 17:38 Uhr)
  Mit Zitat antworten Zitat