Cuatro funciones tomadas del Grupo de Noticias de Visual FoxPro en Español que retornan el tamaño (en bytes) de un archivo.
Estas funciones son un resumen de las funciones enviadas al Grupo de Noticias de Visual FoxPro en Español por Alexander Barreto, Luis María Guayán, Esparta Palma, Carlos Alloatti y Alberto Rodriguez. *----------------
* FUNCION N° 1
*----------------
FUNCTION FileSize(tcFileName)
#DEFINE OF_READ 0
#DEFINE OF_SHARE_DENY_NONE 64
#DEFINE HFILE_ERROR -1
#DEFINE dwordPlus 0xFFFFFFFF + 1
DECLARE INTEGER GetFileSize IN Kernel32;
INTEGER hFile,INTEGER @ lpFileSizeHigh
DECLARE INTEGER OpenFile IN Kernel32;
STRING lpFileName,STRING @ lpReOpenBuff,INTEGER wStyle
DECLARE INTEGER CloseHandle IN Kernel32 INTEGER hObject
LOCAL lpReOpenBuff, hFile, lnSizeLo, lnSizeHi
lpReOpenBuff = REPLICATE(CHR(0), 250)
hFile = OpenFile(tcFilename, @lpReOpenBuff, OF_SHARE_DENY_NONE)
IF hFile # HFILE_ERROR
lnSizeHi = 0
lnSizeLo = GetFileSize(hFile, @lnSizeHi)
=CloseHandle(hFile)
RETURN (lnSizeHi * dwordPlus + lnSizeLo )
ELSE
RETURN 0
ENDIF
ENDFUNC *----------------
* FUNCION N° 2
*----------------
FUNCTION FileSize(tcFileName)
LOCAL la(1)
IF ADIR(la,tcFileName) > 0
RETURN la(1,2)
ELSE
RETURN -1
ENDIF
ENDFUNC *----------------
* FUNCION N° 3
*----------------
FUNCTION FileSize(tcFileName)
LOCAL lcSetComaptible, ln
lcSetCompatible = SET("Compatible")
SET COMPATIBLE ON
ln = FSIZE(tcFileName)
SET COMPATIBLE &lcSetCompatible
RETURN ln
ENDFUNC *----------------
* FUNCION N° 4
*----------------
FUNCTION FileSize(tcFileName)
LOCAL pnHandle, pnSize
pnHandle = FOPEN(tcFileName)
pnSize = FSEEK(pnHandle,0,2)
=FCLOSE(pnHandle)
RETURN pnSize
ENDFUNC Luego de probarlas con un gran número de nombres de archivos, la Función N° 2 es las mas rápida: 4 veces mas rápida que las Funciones N° 3 y N° 4; y 10 veces mas rápida que la Función N° 1. Si a la Función N° 1 se le quita las declaraciones de las funciones de la API de Windows (se las declara afuera de la función y por única vez), la Función N° 2 es solo 2 veces mas rápida que esta opción.
|