OPEN
Flusso = OPEN NomeFile FOR [ READ | INPUT ] [ WRITE | OUTPUT ] [ CREATE | APPEND ] [ WATCH ]
Apre un file in modo lettura, scrittura, creazione o aggiunta dati. Se la parola chiave
CREATE
non è specificata, allora il file deve esistere.
-
Se la parola chiave
CREATE
viene specificata, allora il file viene creato o cancellato se già esiste.
-
Se la parola chiave
APPEND
viene specificata, allora il puntatore del file si muove alla fine subito dopo la sua apertura.
-
Se la parola chiave
READ
o WRITE
viene specificata, allora l'input-output non viene bufferizzato (non viene riservata una posizione di memoria dove mettere i dati in transito da scrivere e leggere in differita).
-
Se la parola chiave
INPUT
o OUTPUT
viene specificata, allora il flusso dei dati viene bufferizzato.
-
Se la parola chiave
WATCH
viene specificata, il file viene così visto dall'interprete:
-
Se almeno un byte può essere letto dal file, allora l'evento
File_Read()
viene chiamato.
-
Se almeno un byte può essere scritto nel file, allora l'evento
File_Write()
viene chiamato.
Se il file viene aperto, un oggetto (object) stream viene restituito nella variabile (variabile)
Flusso.
Attenzione! Per impostazione predefinita, gli streams sono bufferizzati.
Se viceversa si cerca di avere degli streams non bufferizzati, allora si rende necessario l'uso delle parole chiave READ
o WRITE
in modo esplicito.
Diversamente da altri dialetti BASIC, Gambas non cancellerà mai un file quando esso viene aperto con la parola chiave WRITE
.
Quindi se il nuovo contenuto è più piccolo di quello vecchio, una parte del file non desiderata resterà in coda al file modificato.
Per evitare questa situazione (che non è un difetto in quanto può far comodo in altri contesti), bisogna aprire il file includendo la parola chiave CREATE
.
Errori
Messaggio
|
Descrizione
|
Access forbidden (43)
|
L'accesso richiesto per il file non è consentito,
o il permesso di ricerca è negato per una delle
directory se nel percorso specifico il file non
esiste ancora, oppure l'accesso in scrittura alla directory padre non è permessa.
|
File is a directory (46)
|
NomeFile se riferito a una directory. Usare al suo posto la funzione Dir.
|
File or directory does not exist (#45)
|
NomeFile non esiste, o un componente della directory nel percorso specifico non esiste oppure è un link simbolico orfano.
|
Out of memory (1)
|
Il sistema è andato in out of memory (Memoria esaurita).
|
Device is full (37)
|
NomeFile doveva essere creato, ma il dispositivo contenente NomeFile non ha spazio sufficiente per il nuovo file.
|
Not a directory (49)
|
Un componente usato come directory in NomeFile non è, di fatto, una directory.
|
System error... (42)
|
Altri possibili errori di sistema:
-
troppi link simbolici sono stati riscontrati nella risoluzione NomeFile.
-
Il processo è già al massimo numero di file aperti.
-
E' stato raggiunto il limite sul numero totale di file aperti dal sistema.
-
NomeFile fa riferimento a un file speciale di dispositivo e nessun dispositivo corrispondente esiste.
-
Il file di nome è una pipe e nessun processo ha aperto il file per la lettura.
-
NomeFile fa riferimento a un file su un filesystem in sola lettura mentre è stata chiesta la scrittura.
-
NomeFile rimanda a un'immagine eseguibile che è attualmente in esecuzione mentre è stata chiesta la scrittura.
|
Esempi
' Stampa il contenuto di un testo sullo schermo.
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
' Guarda la porta seriale ttyS0 (com1).
DIM hFile AS File
hFile = OPEN "/dev/ttyS0" FOR READ WRITE WATCH
...
PUBLIC SUB File_Read()
DIM iByte AS Byte
READ #hFile, iByte
PRINT "Hai un byte: "; iByte
END
' Lettura dei dati da un file BMP, conoscendo il formato di tipo little-endian:
DIM hFile AS File
DIM iData AS Integer
hFile = OPEN "image.bmp" FOR INPUT
hFile.ByteOrder = gb.LittleEndian
...
READ #hFile, iData
Vedi anche