Yo he probado esta función y la FileSize() pero ambas en algunos archivos me devuelven un valor negativo, que pasa? El valor negativo en si no me preocupa (he hecho una función que recoge el valor absoluto de un numero de coma flotante), si que me preocupa que en algunos archivos, no sé porqué no me devuelve el tamaño real. Los casos que he detectado han sido con archivos superiores a 2GB, pero no me explico porqué con unos si que sucede y con otros no. A alguien le ha ocurrido lo mismo? Alguien sabe como remediarlo? Muchas gracias!
A continuación pongo el código de la función:
Código Delphi
[-]
function GetFileSize(FileName: String): String;
function IsFolder(Folder: String): Boolean;
var
Attributes:Word;
begin
Attributes:=FileGetAttr(Folder);
Result:=(Attributes and faDirectory)=faDirectory;
end;
function AbsoluteValue(Value: Real): Real;
begin
if Value < 0 then
Result := -(Value)
else
Result := Value;
end;
var
F: File of Byte;
Size: Real;
begin
if IsFolder(FileName) = False then
begin
AssignFile(f, FileName);
Reset(f);
try
SetRoundMode(rmNearest);
Size := FileSize(f);
if (Size > 1073741824) or (Size < -1073741824) then
Result := FloatToStr(RoundTo(AbsoluteValue(Size/1073741824),-2))+' Gb'
else
if (Size > 1048576) or (Size < -1048576)then
Result := FloatToStr(RoundTo(AbsoluteValue(Size/1048576),-2))+' Mb'
else
if (Size > 1024) or (Size < -1024) then
Result := FloatToStr(RoundTo(AbsoluteValue(Size/1024),-2))+' Kb'
else
if (Size = 0) then
Result := '1 b'
else
Result := FloatToStr(Size)+ ' b';
finally
CloseFile(f);
end;
end
else Result := '';
end;