Saltar al contenido principal
Versión: Siguiente

VOLUME ATTRIBUTES

VOLUME ATTRIBUTES ( volumen ; tamaño ; utilizado ; libre )

ParámetroTipoDescripción
volumenTextNombre del volumen
tamañoRealTamaño del volumen expresado en bytes
utilizadoRealEspacio utilizado expresado en bytes
libreRealEspacio libre expresado en bytes

Descripción

El comando VOLUME ATTRIBUTES devuelve en bytes el tamaño, el espacio utilizado y el espacio libre del volumen cuyo nombre se pasa en volumen.

Nota: si volumen indica un volumen remoto no montado, la variable OK toma el valor 0 y los tres parámetros devuelven -1.

Ejemplo

Su aplicación incluye algunas operaciones por lotes que se ejecutan en la noche o los fines de semana para almacenar archivos temporales grandes en disco. Para que este proceso sea tan automático y flexible como sea posible, usted escribe una rutina que buscará automáticamente el primer volumen cuyo espacio libre sea suficiente para sus archivos temporales. He aquí el método:

  // Método de proyecto Buscar volumen para espacio
  // Buscar volumen para espacio ( Real ) -> Alfa
  // Buscar volumen para espacio ( Espacio necesario en bytes ) -> Nombre del volumen o cadena vacía
 
 C_STRING(31;$0)
 C_STRING(255;$vsDocNombre)
 var $vlNbVolumenes;$vlVolumenes : Integer
 var $1;$vlTamaño;$vlUtilizado;$vlLibre : Real
 var $vhDocRef : Time
 
  // Inicializar el resultado de la función
 $0:=""
  // Proteger todas las operaciones de entrada/salida con un método de interrupción de errores
 ON ERR CALL("ERROR METHOD")
  // Obtener la lista de los volúmenes
 ARRAY STRING(31;$asVolumenes;0)
 gError:=0
 VOLUME LIST($asVolumenes)
 If(gError=0)
  // Si se corre en Windows, ignorar los dos lectores de diskettes
    If(On Windows)
       $vlVolumen:=Find in array($asVolumenes;"A:\\")
       If($vlVolumen>0)
          DELETE FROM ARRAY($asVolumenes;$vlVolumen)
       End if
       $vlVolumen:=Find in array($asVolumenes;"B:\\")
       If($vlVolumen>0)
          DELETE FORM ARRAY($asVolumenes;$vlVolumen)
       End if
    End if
    $vlNbVolumenes:=Size of array($asVolumenes)
  // Para cada volumen
    For($vlVolumen;1;$vlNbVolumenes)
  // Obtener el tamaño, el espacio utilizado y el espacio libre
       gError:=0
       VOLUME ATTRIBUTES($asVolumenes{$vlVolumen};$vlTamaño;$vlUtilizado;$vlLibre)
       If(gError=0)
  // ¿El espacio libre es suficiente (más de 32K extra) ?
          If($vlLibre>=($1+32768))
  // Si es así, verificar si el volumen no está bloqueado..
             $vsDocNombre:=$asVolumenes{$vlVolumen}+Char(Directory symbol)+"XYZ"+String(Random)+".TXT"
             $vhDocRef:=Create document($vsDocNombre)
             If(OK=1)
                CLOSE DOCUMENT($vhDocRef)
                DELETE DOCUMENT($vsDocNombre)
  // Si todo está bien, devolver el nombre del volumen
                $0:=$asVolumenes{$vlVolumen}
                $vlVolumen:=$vlNbVolumenes+1
             End if
          End if
       End if
    End for
 End if
 ON ERR CALL("")

Una vez se añade este método de proyecto a su aplicación, puede escribir:

 $vsVolumen:=Buscar volumen para espacio(100*1024*1024)
 If($vsVolumen#"")
  // Continuar
 Else
    ALERT("¡Es necesario un volumen con por lo menos 100 MB de espacio libre!")
 End if

Ver también

VOLUME LIST