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 (
|
NomeFile non esiste, o la directory componenti nel percorso specifico non esiste oppure è un link simbolico orfano.
|
|
Out of memory (1)
|
Il sistema è andato in out of memory (supero capacità).
|
|
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.
|
Esempio
' 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