OPEN

hStream = OPEN sFileName FOR [ READ | INPUT ] [ WRITE | OUTPUT ] [ CREATE | APPEND ] [ WATCH ]

Opent een bestand om eruit te lezen, erin te schrijven, waarbij het een nieuw gemaakt bestand kan zijn of een bestaand om er gegevens aan toe te voegen. Als het bestand nog niet bestaat moet de optie CREATE worden gebruikt om een nieuw te maken.

  • Als de optie CREATE wordt opgegevens, dan wordt het bestand opnieuw gemaakt, als het al bestond is de oorspronkelijke inhoud verloren.

  • Als de optie APPEND wordt gebruikt, wordt de bestandswijzer onmiddellijk na het openen van het bestand op het einde van het bestand gezet, om achteraan toe te voegen.

  • Als de opties READ of WRITE worden opgegeven dan wordt de invoer of uitvoer niet gebufferd.

  • Als de optie INPUT of OUTPUT wordt opgegeven wordt de invoer of uitvoer wel gebufferd.

  • Als de optie WATCH wordt gebruikt wordt het bestand door de interpreter in het oog gehouden. :
    • Als minstens één byte van het bestand gelezen kan worden, wordt de handler File_Read() aangeroepen.

    • Als minstens één byte in het bestand geschreven kan worden, wordt de handler File_Write() aangeroepen.

Als het bestand openen lukt, wordt object teruggegeven aan de variabele hStream.

Streams worden standaard gebufferd.

Als je een ongebufferde wil, moet je expliciet de optie READ of WRITE opgeven.
In tegenstelling tot andere Basic dialecten zal Gambas nooit een bestand verwijderen als het bv geopend wordt met de WRITE optie. Dus als de nieuwe inhoud korter is dan de oude, wordt het bestand maar gedeeltelijk overscrheven en blijft er aan het einde een deel van het oude bestand staan. Als je dit niet wil moet je het bestand openen met de optie CREATE .

Fouten

Bericht Beschrijving
Access forbidden (43) De gevraagde toegang tot het bestand is niet toegestaan, of er is geen toelating om te zoeken in een van de mappen in het pad dat voor de bestandsnaam staat. Of het bestand bestond nog niet en er is geen toelating om te schrijven in de betreffende map.
File is a directory (46) File name verwijst naar een map.
File or directory does not exist (45) File name bestaat niet, of een van de mappen in de padnaam bestaat niet of is een loshangende symbolische link.
Out of memory (1) Het geheugen van het systeem is vol.
Device is full (37) File name moest nieuw gemaakt worden, maar het apparaat waarop dat moest gebeuren heeft geen plaats meer.
Not a directory (49) Een van de namen van de mappen die gebruikt worden in het pad van de File name blijkt geen map te zijn.
System error... (42) Andere mogelijke fouten:
  • Er werden te veel symbolische links tegengekomen bij het uitzoeken van het bestand File name.

  • Het proces heeft al het maximum aantal bestanden open.

  • De systeemgrens voor het aantal bestanden is bereikt.

  • File name wijst op een speciaal apparaatbestand en er is geen overeenkomende apparaat.

  • De bestandsnaam is een named pipe en er is geen proces dat het bestand open heeft om het te lezen.

  • File name verwijst naar een bestand op een alleen-lezen bestandssysteem en daarop werd schrijftoegang gevraagd.

  • File name verwijst naar een uitvoerbaar image dat momenteel uitgevoerd wordt en daarop is schrijftoegang gevraagd.

Examples

' Toont de inhoud van een tekstbestand op het scherm

DIM hFile AS File
DIM sLine AS String

hFile = OPEN "/etc/passwd" FOR INPUT

WHILE NOT Eof(hFile)
  LINE INPUT #hFile, sLine
  PRINT sLine
WEND
' De seriele poort bekijken

DIM hFile AS File

hFile = OPEN "/dev/ttyS0" FOR READ WRITE WATCH

...

PUBLIC SUB File_Read()

  DIM iByte AS Byte

  READ #hFile, iByte
  PRINT "Got one byte: "; iByte

END
' Gegevens lezen van een BMP bestand, dat gemaakt is in little-endian vorm :

DIM hFile AS File
DIM iData AS Integer

hFile = OPEN "image.bmp" FOR INPUT
hFile.ByteOrder = gb.LittleEndian
...
READ #hFile, iData

Zie ook