version 6.0
VOLUME ATTRIBUTES (volume; size; used; free)
| Parameter | Type | Description | |
| volume | String | Volume name | |
| size | Number | Volume size expressed in bytes | |
| used | Number | Used space expressed in bytes | |
| free | Number | Free space expressed in bytes |
Description
The command VOLUME ATTRIBUTES returns, expressed in bytes, the size, the used space and the free space for the volume whose name you pass in volume.
Example
Your application includes some batch operations running the night or the week-end that store huge temporary files on disk. To make this process as automatic and flexible as possible, you write a routine that will automatically find the first volume whose free space is sufficient for your temporary files. You might write the following project method:
` Find volume for space Project Method
` Find volume for space ( Real ) -> String
` Find volume for space ( Space needed in bytes ) -> Volume name or Empty string
C_STRING(31;$0)
C_STRING(255;$vsDocName)
C_LONGINT($vlNbVolumes;$vlVolume)
C_REAL($1;$vlSize;$vlUsed;$vlFree)
C_TIME($vhDocRef)
` Initialize function result
$0:=""
` Protect all I/O operations with an error interruption method
ON ERR CALL("ERROR METHOD")
` Get the list of the volumes
ARRAY STRING(31;$asVolumes;0)
gError:=0
VOLUME LIST($asVolumes)
If (gError=0)
` If running on windows, skip the (usual) two floppy drives
If (On Windows )
$vlVolume:=Find in array($asVolumes;"A:")
If ($vlVolume>0)
DELETE ELEMENT($asVolumes;$vlVolume)
End if
$vlVolume:=Find in array($asVolumes;"B:")
If ($vlVolume>0)
DELETE ELEMENT($asVolumes;$vlVolume)
End if
End if
$vlNbVolumes:=Size of array($asVolumes)
` For each volume
For ($vlVolume;1;$vlNbVolumes)
` Get the size, used space and free space
gError:=0
VOLUME ATTRIBUTES($asVolumes{$vlVolume};$vlSize;$vlUsed;$vlFree)
If (gError=0)
` Is the free space large enough (plus an extra 32K) ?
If ($vlFree>=($1+32768))
` If so, check if the volume is unlocked...
$vsDocName:=$asVolumes{$vlVolume}+Char(Directory symbol )
+"XYZ"+String(Random)+".TXT"
$vhDocRef:=Create document($vsDocName)
If (OK=1)
CLOSE DOCUMENT($vhDocRef)
DELETE DOCUMENT($vsDocName)
` If everything's fine, return the name of the volume
$0:=$asVolumes{$vlVolume}
$vlVolume:=$vlNbVolumes+1
End if
End if
End if
End for
End if
ON ERR CALL("")
Once this project method is added to your application, you can for instance write:
$vsVolume:=Find volume for space (100*1024*1024)
If($vsVolume#"")
` Continue
Else
ALERT("A volume with at least 100 MB of free space is required!")
End if
See Also