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