Saltar al contenido principal
Versión: Siguiente

VOLUME ATTRIBUTES

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

ParámetroTipoDescripción
volumenCadena🡒Nombre del volumen
tamañoReal🡘Tamaño del volumen expresado en bytes
utilizadoReal🡘Espacio utilizado expresado en bytes
libreReal🡘Espacio 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