Zitat von
NicoDE:
Zitat von
Binärbaum:
Hier mal eine Funktion, die den negativen Wert in die richtige Entsprechung umrechnet
Man könnte das ganze kompatibler gestalten, indem man einen Int64 zurückgibt und eine überladene Funktion mit einem Int64 als Paramater schreibt (falls das Property von TFileStream in einer anderen Delphi-Version tatsächlich Int64 liefert...).
edit: ein Int64(Longword(aSize)) hätte es auch getan, die Additionen sorgen nur für Probleme bei aktivierten Overflow-Checks.
Nunja, Int64 ist aber in der Hinsicht nicht ganz sinnvoll, da ein Int64 ja auch negative Werte annehmen kann, aber es keine Dateien gibt, die eine negative Größe haben. Int64 ist wie gesagt nur dann nötig, wenn die Datei größer als 4GB ist, ansonsten reicht Longword. (AFAIK können Dateien unter
Win9x/ME und
WinNT nicht größer als 4GB sein, wie das bei WinXP aussieht, weiß ich nicht
)
Und wegen dem Overflow: der sollte eigentlich nicht auftreten, denn wenn man zu einem negativen Wert 2 Mrd. addiert, ist man immer noch unter 2 Mrd. und somit auch noch im Bereich von LongInt.
Notfalls kann die Zeile ja so abgeändert werden:
else Result:= 2147483647 + LongWord(aSize+2147483648);
Damit ist man dann auf der sicheren Seite.
MfG
Binärbaum