Obtención del tamaño de un archivo grande (sin utilizar Size)

Para no utilizar Size que no funcionará en discos grandes ya que se producirá una excepción al intentar meter en un ‘integer’ el tamaño del archivo (pienso, por ejemplo, en una copia de varios CD-ROM a disco, sobre un mismo archivo).

{-----------------------------------------------------------------------------}
{ FUNCIÓN: TamanoArchivo(const NombArch: String; var Tamano: Cardinal): Boolean;}
{                                                                             }
{ ACCIÓN : Devuelve en la variable 'Tamano' el tamaño en bytes del archivo    }
{          apuntado por el parámetro 'NombArch' (la variable SE MODIFICA).    }
{          Si 'NombArch = ''' o se produce un error, devuelve FALSE.          }
{          En este caso, la variable 'Tamano' contiene el código de error.    }
{-----------------------------------------------------------------------------}
function TamanoArchivo(const NombArch: String; var Tamano: Cardinal): Boolean;
var
   Handle: THandle;
   FindData: TWin32FindData;
begin
   if ('' = Trim(NombArch)) then   { ¡¡¡ Cadena en blanco !!! }
   begin
      Tamano := 0;
      Result := FALSE;
   end
   else   { Comprobar existencia }
   begin
      Handle := Windows.FindFirstFile(PChar(NombArch), FindData);
      if (INVALID_HANDLE_VALUE <> Handle) then
      begin
         { Tamaño del archivo }
         Tamano := (FindData.nFileSizeHigh * MAXDWORD) + FindData.nFileSizeLow;
         Windows.FindClose(Handle);
         Result := TRUE;
      end
      else
      begin
         { Devolver el error producido }
         Tamano :=  Windows.GetLastError;
         Result := FALSE;
      end;
   end;
end;