// Resumen: Devuelve el tamaño del contenido de un directorio
// y todos sus subdirectorios
//
// Sintaxis:
//[ <Result> = ] gfSizeFolder (<pcDirectorio> is string
// [, <pcTipeReturn> is string [, <sError> is string]])
//
// Parámetros:
// pcDirectorio (ANSI string): Ruta <root> del
// directorio a tratar
// pcTipeReturn (ANSI string - valor
// predeterminado="B"):
// Devolver el valor como: B (defecto)
// , KB, MB, GB, TB, PB, EB
// sError (ANSI string - valor predeterminado=""):
// Si se produce un error, se devuelve
// el mensaje del error
// Valor de retorno:
// numeric: Un valor correspondiente al parámetro
/7 "pcTipeReturn" o -1 si ocurre un error
//
// Ejemplo:
// gfSizeFolder("c:\temp","MB")
//
PROCEDURE gfSizeFolder(LOCAL pcDirectorio is string,
LOCAL pcTipeReturn is string = "B",
LOCAL sError is string = "")
//*---------------------------------------------------------------
//*
//* Devuelve el tamaño del directorio pasado como parámetro (y
//* subdirectorios)
//* NOTA: if ocurre Error, devuelve -1
//*
//* Exabyte (EB)
//* Petabyte (PB)
//* Terabyte (TB)
//* Gigabyte (GB)
//* Megabyte (MB)
//* Kilobyte (KB)
//* byte (B)
//*
//*---------------------------------------------------------------
lnSizeBytes, lnSizeReturn are numeric
WHEN EXCEPTION IN
lnSizeBytes = fDirSize(pcDirectorio)
// Si ha ocurrido un error
IF ErrorOccurred THEN
// Lanzamos la excepción para capturar el error
ExceptionThrow(1,ErrorInfo(errMessage))
END
SWITCH pcTipeReturn
CASE "KB"
lnSizeReturn = lnSizeBytes / 1024
CASE "MB"
lnSizeReturn = lnSizeBytes / (1024^2)
CASE "GB"
lnSizeReturn = lnSizeBytes / (1024^3)
CASE "TB"
lnSizeReturn = lnSizeBytes / (1024^4)
CASE "PB"
lnSizeReturn = lnSizeBytes / (1024^5)
CASE "EB"
lnSizeReturn = lnSizeBytes / (1024^6)
OTHER CASE
lnSizeReturn = lnSizeBytes
END
DO
lnSizeReturn = -1
sError = ExceptionInfo(errMessage)
END
RESULT (lnSizeReturn)