Documente Academic
Documente Profesional
Documente Cultură
I. Notion de fichier Un fichier est un paquet d'informations : ce peut tre aussi bien du texte, que de la musique ou une image. Chaque objet que vous manipulez en informatique (une page Web, la musique de, vos photos de vacances, un logiciel, etc.) correspond un fichier. Un fichier est un ensemble dinformations de mme type organise dune certaine faon et stockes sur un support externe de manire permanente (disque dur, flashe disqueetc.). Ces informations sont utilises dans une mme application ou pour un mme traitement.
I. Notion de fichier (suite) Le fichier squentiel est considr comme un prototype dentre/sortie qui aussi considr comme une base squentielle des informations (les informations sont lues ou crites lune aprs lautre en commenant par le premier enregistrement et sans pouvoir retourner en arrire). Un fichier est organis en gnrale sous forme de bloc ou denregistrement en squentielle. Dans un fichier squentiel pour accder un lment k on doit parcourir le fichier depuis le dbut.
Les fichiers sur disque servent stocker des informations. On peut naviguer l'intrieur d'un tel fichier l'aide de fonctions de positionnement (que nous verrons un peu plus loin). A chaque instant, un pointeur indique la position courante dans le fichier. Ce pointeur se dplace, quelques exceptions prs, aprs chaque opration de lecture, d'criture ou appel d'une fonction de positionnement par exemple.
II.2 Ouverture et fermeture d'un fichier (suite) Fondamentalement, les valeurs suivantes peuvent tre utilises dans l'argument mode : "r" : ouvrir le fichier en lecture. Le fichier spcifi doit dj exister. "w" : ouvrir le fichier en criture. S'il n'existe pas, il sera cr. S'il existe dj, son ancien contenu sera effac. "a" : ouvrir le fichier en mode ajout, qui est un mode dans lequel toutes les oprations d'criture dans le fichier se feront la fin du fichier. S'il n'existe pas, il sera cr.
II.2 Ouverture et fermeture d'un fichier (suite) Avant d'effectuer une opration de lecture juste aprs une opration d'criture, il faut tout d'abord appeler fflush ou une fonction de positionnement Avant d'effectuer une opration d'criture juste aprs une opration de lecture, il faut d'abord appeler une fonction de positionnement, moins d'avoir atteint la fin du fichier. Lorsqu'on n'en a plus besoin, il faut ensuite fermer le fichier :
int fclose(FILE * f);
Exemple
Le programme suivant cre un fichier, hello.txt, pour y crire ensuite une et une seule ligne : Hello, world.
#include <stdio.h> int main() { FILE * f; f = fopen("hello.txt", "w"); if (f != NULL) { fprintf(f, "Hello, world\n"); fclose(f); } return 0;
II.3.1. Position courante Il existe toutefois des exceptions comme dans le cas ou le fichier est ouvert en mode ajout par exemple, auquel cas toutes les oprations d'criture se feront la fin du fichier, indpendamment de la position courante.
Ce mode daccs est appel le mode squentiel : les donnes du fichier sont lues ou crites les unes la suite des autres. Il est galement possible d'accder un fichier en mode direct, c'est--dire que l'on peut se positionner n'importe quel endroit du fichier.
La variable deplacement dtermine la nouvelle position dans le fichier. Il s'agit d'un dplacement relatif par rapport l'origine ; il est compt en nombre d'octets. La variable origine peut prendre trois valeurs :
SEEK_SET (gale 0) : dbut du fichier ; SEEK_CUR (gale 1) : position courante ; SEEK_END (gale 2) : fin du fichier.
Permet de renommer un fichier lorsque cela est possible. Si la fonction russit, 0 est retourn. III.2. Supprimer un fichier La fonction remove :
int remove(const char * filename);
III.3. Les fichiers temporaires Un fichier temporaire est un fichier utilis par un programme puis supprim lorsque celui-ci se termine. La fonction tmpfile FILE * tmpfile(void); Permet de crer un fichier en mode "wb+" qui sera automatiquement supprim la fin du programme. On peut toujours bien sr crer un fichier temporaire manuellement . III.4 Rediriger un flux d'E/S La fonction freopen : FILE * freopen(const char * filename, const char * mode, FILE * f); ferme le fichier associ au flux f, ouvre le fichier dont le nom est spcifi par filename selon le mode spcifi par mode en lui associant le flux reprsent par f puis retourne f ou NULL si une erreur s'est produite.
Dans le programme suivant, la sortie standard est redirige vers le fichier out.txt.
#include <stdio.h> int main()
{
if (freopen("out.txt", "w", stdout) != NULL) { printf("Hello, world\n"); fclose(stdout); } else perror("out.txt"); return 0; }