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 VOLUME ATTRIBUTES command returns, expressed in bytes, the size, the used space and the free space for the volume whose name you pass in volume.
Note: If volume indicates a non-mounted remote volume, the OK variable is set to 0 and the three parameters return -1.
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