Bitte kurz warten...

AmigaOS Programmierung

Bestimmung des freien Speicherplatzes auf einem Datenträger

Wer regelmäßig Dateien abspeichert, wird vielleicht schon einmal auf das Problem gestoßen sein, den freien Speicherplatz einer Partition bestimmen zu müssen. Der folgende Code hilft dabei:

#include <stdio.h>
#include <proto/dos.h>
#include <proto/exec.h>
...
BPTR lock = NULL; //Lock auf das Laufwerk
struct InfoData infodata; //Informationen des Laufwerks
STRPTR name = NULL; //z.B.: "DH0:"
int bytes = 0; //z.B.: 500
...
if((lock=Lock(name,SHARED_LOCK))!=NULL) //Versucht einen Zugriff auf das Laufwerk
{
if(Info(lock,&infodata)) //Holt die Laufwerksinformationen
{
//Freie Bytes:
//(infodata.id_NumBlocks-infodata.id_NumBlocksUsed)*infodata.id_BytesPerBlock;
 
//Bytes pro Block:
//infodata.id_BytesPerBlock
 
//Benötigte Blöcke:
//(bytes/infodata.id_BytesPerBlock)+1
 
//Abfrage ob genug Blöcke frei sind
if( ((bytes/infodata.id_BytesPerBlock)+1) <= (infodata.id_NumBlocks-infodata.id_NumBlocksUsed))
{
//Platz reicht aus
}
 
}
UnLock(lock); //Laufwerk freigeben
}
...
 
Dateien werden in Blöcke abgespeichert, sodass in Wirklichkeit also nicht nach der Anzahl der freien Bytes sondern der freien Blöcke auf dem Datenträger gesucht werden muss. Wenn die Blockgröße 512 Byte beträgt und die Datei 513 Byte groß ist, dann werden zwei Blöcke für die Datei benötigt.
 
Download des Quelltextes