Wie hast Du die FileSize ermittelt ? Für Dateien > 2 GB braucht man INT64 und das bekommt man, wenn man die Dateigröße (64 Bit = 8 Bytes) aus dem Directory-Eintrag holt, andernfalls bekommst Du nur die unteren 4 Bytes und da wird das oberste Bit zum Vorzeichen.
Die Abfrage
aFilesize > 1E12
wird FALSE, wenn aFileSize negativ ist, dann kommst Du zu BYTE mit der negativen Zahl.
Siehe auch hier
http://www.delphipraxis.net/24331-da...ermitteln.html
Longint besitzt nur 32 Bit und kann die FileSize nur für kleinere Dateien darstellen.
Statt der Division
FileSize/ 1024
sollte man lieber SHR benutzen
Delphi-Quellcode:
FileSize shr 10 // KBytes
FileSize shr 20 // MBytes
FileSize shr 30 // GBytes
FileSize shr 40 // TBytes
Cardinal statt LongInt
ist auch nur für kleinere Dateien anwendbar, da damit ebenfalls nur die unteren 32 Bit der tatsächlichen FileSize (64 Bit) abbildbar sind.
Die Dezimalzahl 2.147.483.648 entspricht einer Hex 80 00 00 00, das ist bereits in einer 32Bit Variablen das Minuszeichen, ab dieser Größe wird Longint negativ (reichlich 2 GB).