#include <stdio.h> // <cstdio> en C++
FILE * fopen( const char * filename, const char * accessMode ); // Avant C99 FILE * fopen( const char * restrict filename, const char * restrict accessMode ); // A partir de C99
Cette fonction permet d'ouvrir un flux de caractère basé sur fichier. Vous pouvez choisir entre différents modes d'ouverture du fichier (ouverture en lecture, en écriture, en ajout, ...) en fonction de vos besoins.
FOPEN_MAX
.
Si vous cherchez à dépasser cette limite, une erreur sera produite.
Mode d'ouverture | Description | ||
---|---|---|---|
Pour les fichiers en mode texte. | |||
"r" (pour read) | Ouverture du flux en lecture. Attention : le fichier doit exister préalablement. | ||
"r+" | Ouverture du flux en lecture/écriture, et la position courante est fixée au début du fichier. Attention : le fichier doit exister préalablement. | ||
"w" (pour write) | Ouverture du flux en écriture. Si le fichier existe, il sera alors écrasé. Sinon le fichier sera créé. | ||
"w+" | Ouverture du flux en lecture/écriture. Si le fichier existe, il sera alors écrasé et la position courante est fixée au début du fichier. Sinon le fichier sera créé. | ||
"a" (pour append) | Ouverture du flux en mode ajout. Si le fichier n'existe pas, il sera alors créé. Sinon, son contenu sera conservé et la position courante sera à la fin du fichier. | ||
"a+" | Ouverture du flux en mode lecture/ajout. Si le fichier n'existe pas, il sera alors créé. La position courante pour les lectures sera en début de fichier et celle pour les écritures en fin de fichier. | ||
Pour les fichiers en mode binaire. | |||
"rb" (read binary) | Ouverture du flux en lecture. Attention : le fichier doit exister préalablement. | ||
"rb+" | Ouverture du flux en lecture/écriture, et la position courante est fixée au début du fichier. Attention : le fichier doit exister préalablement. | ||
"wb" (write binary) | Ouverture du flux en écriture. Si le fichier existe, il sera alors écrasé. Sinon le fichier sera créé. | ||
"wb+" | Ouverture du flux en lecture/écriture. Si le fichier existe, il sera alors écrasé et la position courante est fixée au début du fichier. Sinon le fichier sera créé. | ||
"ab" (append binary) | Ouverture du flux en mode ajout. Si le fichier n'existe pas, il sera alors créé. Sinon, son contenu sera conservé et la position courante sera à la fin du fichier. | ||
"ab+" | Ouverture du flux en mode lecture/ajout. Si le fichier n'existe pas, il sera alors créé. La position courante pour les lectures sera en début de fichier et celle pour les écritures en fin de fichier. |
L'ouverture d'un fichier peut échouer pour différentes raisons (problème de sécurité, fichier non existant, ...). Il est donc nécessaire de vérifier la valeur retournée par un appel à cette fonction. Si la valeur retournée est non nulle, alors tout c'est bien passé : dans ce cas, la valeur de retour (de type FILE *) correspond au descripteur du fichier ouvert.
Si, par contre, une valeur nulle vous est retournée, alors c'est qu'une erreur vient de survenir. Il vous faudra alors consulter la variable
errno
pour obtenir de plus amples informations sur l'erreur constatée.
EACCES (POSIX) : un problème de sécurité d'accès au fichier a été constaté.
EEXIST (POSIX) : impossible de créer un nom de fichier unique.
EINTR (POSIX) : l'appel a été interrompu par un signal.
EINVAL (POSIX): le mode d'ouverture du fichier que vous avez spécifié est invalide.
EMFILE (Error Max FILE - POSIX) : le nombre maximal de fichiers pouvant être ouvert par le processus est atteint.
ENFILE (POSIX) : le nombre maximal de fichiers pouvant être ouvert par le système d'exploitation est atteint.
ENOSPC (Error NO SPaCe - POSIX) : le répertoire est saturé et il n'est plus possible d'y ajouter un nouveau fichier.
EROFS (Error Read Only File System - POSIX) : le système de fichiers est en lecture seule.
...
#include <stdio.h> #include <stdlib.h> int main( int argc, char * argv[] ) { FILE * inputFile; argc--; argv++; if ( argc == 0 ) { printf( "Usage: sample filename...\n" ); exit( 0 ); } inputFile = fopen( argv[0], "a" ); if ( inputFile == NULL ) { printf( "Cannot open file %s\n", argv[0] ); exit( 0 ); } fprintf( inputFile, "Appending a new message in the file\n" ); fclose( inputFile ); return 0; }
C89 / C99 / C11 / C18
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :