OPEN

Stream = OPEN File name FOR [ READ | INPUT ] [ WRITE | OUTPUT ] [ CREATE | APPEND ] [ WATCH ]

Öffnet eine Datei, um Daten zu lesen, zu schreiben oder anzuhängen. Wenn CREATE nicht angegeben wird, muss die Datei existieren.

  • Wenn CREATE angegeben wird, wird die Datei erstellt oder gelöscht, wenn sie bereits existierte.

  • Wenn APPEND angegeben wird, wird der Dateipointer gleich beim Öffnen an das Ende der Datei gesetzt.

  • Wenn READ oder WRITE angegeben wird, wird beim Lesen oder Schreiben nicht gepuffert.

  • Wenn INPUT oder OUTPUT angegeben wird, wird beim Lesen oder Schreiben gepuffert.

  • Wenn WATCH angegeben wird, wird die Datei vom Interpreter überwacht :
    • Wenn mindestens ein Byte aus der Datei gelesen werden kann, wird der Event-Handler File_Read() aufgerufen.

    • Wenn mindestens ein Byte in die Datei geschrieben werden kann, wird der Event-Handler File_Write() aufgerufen.

Wenn die Datei erfolgreich geöffnet wurde, wird ein stream-Objekt and die Variable Stream zurückgeliefert.

Per Voreinstellung werden Streams immer gepuffert.

Um einen ungepufferten Stream zu bekommen, muss explizit READ oder WRITE angegeben werden.

Anders als in anderen Basic-Dialekten wird eine bereits bestehende Datei beim Öffnen mit WRITE nicht explizit gelöscht. Beim erneuten Beschreiben können deshalb Reste der alten Dateiversion in der Datei verbleiben. Um dies zu verhindern, sollte immer CREATE mit angegeben werden.

Fehler

Nachricht Beschreibung
Access forbidden (43) Der verlangte Zugriff auf die Datei ist nicht gestattet; für eines der Verzeichnisse im Pfad zu der Datei besteht keine Leseerlaubnis; oder die Datei existiert noch nicht und in das Verzeichnis darf nicht geschrieben werden.
File is a directory (46) File name bezieht sich auf Verzeichnis.
File or directory does not exist (45) File name existiert nicht oder ein Teil der Verzeichnisangabe existiert nicht oder ist ein leerer symbolischer Link.
Out of memory (1) Speicher voll.
Device is full (37) File name wurde angelegt, aber das Gerät, das File name enthält, hat keinen Platz für die neue Datei.
Not a directory (49) Ein Teil der Verzeichnisangabe für File name ist eigentlich gar kein Verzeichnis.
System error... (42) Andere mögliche Systemfehler:
  • Beim Auflösen von File name wurden zu viele symbolische Links entdeckt.

  • Der Prozess hat schon die maximal mögliche Anzahl Dateien geöffnet.

  • Die Systembegrenzung für die Gesamtzahl geöffneter Dateien wurde erreicht.

  • File name bezieht sich auf eine Gerätedatei, und es gibt kein entsprechendes Gerät.

  • Die genannte Datei ist eine Pipe, und kein Prozess hat die Datei zum Lesen geöffnet.

  • File name bezieht sich auf eine Datei in einem Read-Only-Dateisystem, und es wurde Schreibzugriff verlangt.

  • File name bezieht sich auf ein Executable Image, das momentan ausgeführt wird, und es wurde Schreibzugriff verlangt.

Examples

' Gibt den Inhalt einer Textdatei auf dem Bildschirm aus

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
' Einen seriellen Port überwachen

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
' Daten aus einer BMP-Datei lesen, wobei bekannt ist, dass diese Little-Endian-Format benutzt:

DIM hFile AS File
DIM iData AS Integer

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

Siehe auch