![]() |
GetFileSizeEx gibt falsche werte bei großen Dateien
Hallo,
die Funktion GetFileSizeEx gibt mir bei großen Dateien über 1 Gb absolut falsche werte zurück, bei einem 6Gb File zeigt es 1gb an, ein 5 Gb File zeigt 300 Mb und ein 4 Gb File zeigt 2 Gb. Kennt jemand das Problem? Betriebssystem hier ist windows vista 32
Delphi-Quellcode:
function GetFileSizeEx(const AFileName: string): Int64; var F: TSearchRec; begin Result := -1; if FindFirst(AFileName, faAnyFile, F) = 0 then begin try Result := F.FindData.nFileSizeLow or (F.FindData.nFileSizeHigh shl 32); finally SysUtils.FindClose(F); end; end; end; ist daran etwas falsch? |
AW: GetFileSizeEx gibt falsche werte bei großen Dateien
|
AW: GetFileSizeEx gibt falsche werte bei großen Dateien
Hi,
danke :-) hatte nach getfilesizeex gesucht da hab ich das nicht gefunden *g* danke Dir! Werd die Versionen ausprobieren. Gruß Tom |
AW: GetFileSizeEx gibt falsche werte bei großen Dateien
F.FindData.nFileSizeHigh erst auf 64 Bit vergrößern und dann schiften, denn wo sollen die Bits sonst hin?
Delphi-Quellcode:
.
Result := F.FindData.nFileSizeLow or (Int64(F.FindData.nFileSizeHigh) shl 32);
PS: solch einfache Bit-Operationen sollten keine Probleme bereten, weswegen der Resourceschutzblock unnötig wäre. PSS:
Delphi-Quellcode:
function GetFileSizeEx(const AFileName: string): Int64;
var F: TSearchRec; begin if FindFirst(AFileName, faAnyFile, F) = 0 then begin Int64Rec(Result).Lo := F.FindData.nFileSizeLow; Int64Rec(Result).Hi := F.FindData.nFileSizeHigh; SysUtils.FindClose(F); end else Result := -1; end; |
AW: GetFileSizeEx gibt falsche werte bei großen Dateien
Kleine Änderung für XE2:
Delphi-Quellcode:
function GetFileSizeEx(const AFileName: string): Int64;
var F: TSearchRec; begin if FindFirst(AFileName, faAnyFile, F) = 0 then begin Int64Rec(Result).Lo := F.FindData.nFileSizeLow; Int64Rec(Result).Hi := F.FindData.nFileSizeHigh; System.SysUtils.FindClose(F);// <----------------- end else Result := -1; end; |
AW: GetFileSizeEx gibt falsche werte bei großen Dateien
Zitat:
Sonst würde auch FindFirst nicht gefunden werden. Also entweder alles mit Prefix oder gar nix. |
AW: GetFileSizeEx gibt falsche werte bei großen Dateien
Weil das eine universelle Funktion ist und oftmals zuerst das FindClose aus der SysUtils gefunden wird, wo es dann heißt "Parameter ist falsch".
[edit] Ups, genau andersrum ... ich meinte das FindClose aus der WinApi.Windows . |
AW: GetFileSizeEx gibt falsche werte bei großen Dateien
Obwohl die Frage für den TE bereits beantwortet wurde, vielleicht doch noch die Antwort auf die Frage:
Zitat:
Delphi-Quellcode:
SHL 32 schiebt alles um 32 Bit nach links. So wie es ist, ist das Ergebnis aber ein 32Bit Integer. Somit werden die 32 Bits ins Nichts geschoben und man erhält ein falsches Ergebnis.
...
Result := F.FindData.nFileSizeLow or (F.FindData.nFileSizeHigh shl 32); ... Ohne das jetzt nachzuprüfen, das sollte das Problem beseitigen:
Delphi-Quellcode:
//EDIT
...
Result := Int64(F.FindData.nFileSizeLow) or (Int64(F.FindData.nFileSizeHigh) shl 32); ... Ups, sehe gerade, himitsu hat schon drauf hingewiesen. Sorry, hab nicht alle Beitröge vorher gelesen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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