OPEN
Stream = OPEN NomFichier FOR [ READ | INPUT ] [ WRITE | OUTPUT ] [ CREATE | APPEND ] [ WATCH ]
Ouvre un fichier en lecture, écriture, création ou ajout de données. Le fichier doit exister, sauf si le mot clé
CREATE
est spécifié.
-
Si le mot-clé
CREATE
est spécifié, alors le fichier est créé, ou vidé s'il existe déjà.
-
Si le mot-clé
APPEND
est spécifié, alors l'index de fichier est placé à la fin du fichier juste après que le fichier soit ouvert.
-
Si les mots-clés
READ
ou WRITE
sont spécifiés, alors les entrées-sorties ne sont pas mises en tampon.
-
Si les mots-clés
INPUT
ou OUTPUT
sont spécifiés, alors les entrées-sorties sont mises en tampon.
-
Si le mot-clé
WATCH
est spécifié, le fichier est géré par l'interpréteur via l'appel système select(2) :
-
Si au moins un octet peut être lu depuis le fichier, alors le handler Gestionnaire d'évènement
File_Read()
est appelé.
-
Si au moins un octet peut être écrit dans le fichier, alors le handler Gestionnaire d'évènement
File_Write()
est appelé.
Si l'ouverture du fichier est réussie, un objet flux est retourné à la variable de flux
Stream.
Par défaut, les flux sont mis en tampon.
Si vous voulez disposer d'un flux non mis en tampon,vous devez utiliser explicitement les mots-clés
READ
ou
WRITE
.
A l'inverse d'autres dialectes Basic, Gambas n'efface jamais un fichier ouvert par le mot clé WRITE
par exemple.
Aussi, si le nouveau contenu est plus petit que l'ancien, un résidu de l'ancienne version demeurera à la fin du nouveau fichier.
Pour éviter cela, ouvrez le fichier en incluant le mot-clé CREATE
.
Erreurs
Message
|
Description
|
Access forbidden (43)
|
L'accès au fichier demandé n'est pas autorisé, ou la permission de recherche est refusée pour l'un des répertoires dans le nom de chemin du préfixe de chemin, ou le fichier n'existe pas encore et les droits d'accès à l'écriture dans le répertoire parent ne sont pas établis.
|
File is a directory (46)
|
NomFichier se réfère à un répertoire. utilisez la fonction Dir à la place !
|
File or directory does not exist (45)
|
NomFichier n'existe pas, ou un composant répertoire du chemin n'existe pas ou est un lien symbolique rompu.
|
Out of memory (1)
|
La capacité de mémoire système est dépassée.
|
Device is full (37)
|
NomFichier devait être créé mais le périphérique contenant NomFichier n'a pas de place pour le nouveau fichier.
|
Not a directory... (49)
|
Un composant utilisé comme répertoire dans NomFichier n'est pas, en fait, un répertoire.
|
System error... (42)
|
Autres erreurs système possibles :
-
Liens symboliques trop nombreux lors de la résolution de NomFichier.
-
Le process a déjà atteint le nombre maximum de fichiers ouverts.
-
La limite maximale de nombre de fichiers ouverts a été atteinte par le système.
-
NomFichier se réfère a un fichier périphérique spécial et aucun périphérique correspondant n'existe.
-
Le nom de fichier correspond à un pipe nommé et aucun process n'a ouvert le fichier en lecture.
-
NomFichier se réfère à un fichier sur un système de fichiers en lecture seule et un accès en écriture a été requis.
-
NomFichier se réfère à une image exécutable en cours d'exécution et un accès en écriture a été requis.
|
Exemples
' Affiche le contenu d'un fichier texte à l'écran
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
' Surveillance d'un port série
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
' Lecture de données depuis un fichier BMP, sait utiliser le format little-endian :
DIM hFile AS File
DIM iData AS Integer
hFile = OPEN "image.bmp" FOR INPUT
hFile.ByteOrder = gb.LittleEndian
...
iData = READ #hFile As Integer
Voir aussi