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;