Вы находитесь на странице: 1из 5

TP N 1

Fvrier 2012

Etude thorique

Les fichiers en langage C


Problmatique Le dfaut avec les variables, c'est qu'elles n'existent que dans la mmoire vive( !"#$ %ne fois votre &ro'ramme arr(t, toutes vos variables sont su&&rimes de la mmoire et il n'est &as &ossible de retrouver ensuite leur valeur

I.

Ouvrir et fermer un fichier

Pour lire et crire dans des fichiers, nous !llons nous servir de fonctions si tues dans la librairie stdio

1. fopen:ouverture du fichier
le &rotot)&e de la fonction fo&en FIL ! fopen"const char! nom#uFichier$ const char!modeOuverture%& *ette fonction attend + &aram,tres - Le nom du fichier . ouvrir - Le mode d'ouverture du fichier *ette fonction renvoie$$$ un &ointeur sur /0LE

'emarque
La fonction fo&en$ Elle renvoie un /0LE1$0l est im&ortant de rcu&rer ce &ointeur, &our &ouvoir ensuite lire et crire dans le fichier$ Nous allons donc crer un &ointeur de /0LE au dbut de notre fonction (&ar exem&le la fonction main Exem&le

int main(# 2/0LE1fichier3 eturn 435

Le &aram,tre 6mode 7uverture6$


(r( : lecture seule : 8ous &ourre9 lire le contenu du fichier, mais &as crire dedans$ Le fichier doit avoir t cr au &ralable$ ()( : criture seule : 8ous &ourre9 crire dans le fichier, mais &as lire son contenu$ :i le fichier n'existe &as, il sera cr$ (a( : mode d*a+out : 8ous crire9 dans le fichier, en &artant de la fin du fichier$ 8ous ra;outere9 donc du texte . la fin du fichier$ :i le fichier n'existe &as, il sera cr$ (r,( : lecture et criture : 8ous &ourre9 lire et crire dans le fichier$ Le fichier doit avoir t cr au &ralable$ (),( : lecture et criture$ avec suppression du contenu au pralable : Le fichier est donc d'abord vid de son contenu, et vous crive9 et lise9 ensuite dedans$ :i le fichier n'existe &as, il sera cr$ (a,( : a+out en lecture - criture . la fin : 8ous crive9 et lise9 du texte . &artir de la fin du fichier$ :i le fichier n'existe &as, il sera cr$ Exem&le

int main(# 2/0LE1 fichier < N%LL3

"me =ar'ouri$:

TP N 1
Fvrier 2012 fichier < fo&en(6test$txt6, 6r>6#3return 435 Exem&le

Etude thorique

int main(# 2/0LE 1fichier<N%LL3 fichier< fo&en(6*-??Pro'ram /iles??Exem&le??exercice$txt6, 6r>6#3 return 435 /ester l*ouverture du fichier int main(# 2 /0LE1 fichier < N%LL3 fichier < fo&en(6test$txt6, 6r>6#3 if (fichier @< N%LL# 2AA 7n &eut lire et crire dans le fichier5 Else 2AA 7n affiche un messa'e d'erreur si on veut &rintf(60m&ossible d'ouvrir le fichier test$txt6#35 return 43 5

2. fclose :fermer le fichier


:on &rotot)&e est -int fclose(/0LE1 &ointeur:ur/ichier#3 Exem&le int main(# 2/0LE1 fichier < N%LL3 fichier < fo&en(6test$txt6, 6r>6#3 if (fichier @< N%LL#2AA 7n lit et on crit dans le fichier AA$$$fclose(fichier#3 AA 7n ferme le fichier qui a t ouvert5 return 435

II.

Les diffrentes mthodes de lecture - criture

1.

crire dans le fichier

0l existe &lusieurs fonctions ca&ables d'crire dans un fichier$ *e sera . vous de choisir celle qui est la plus adapte . votre cas. 0oici les 1fonctions que 2ous allons tudier : f&utc- crit un caract,re dans le fichier (%N:E%L caract,re . la fois#$ f&uts- crit une chaBne dans le fichier f&rintf- crit une chaBne 6formate6 dans le fichier, fonctionnement quasiCidentique . &rintf

Fputc
:on &rotot)&e int fputc"int caractere$ FIL ! pointeur3urFichier%&'emarque :La fonction retourne un int$ c*est un code d*erreur. Cet int vaut OF si l*criture a chou Exem&le int main(# 2 /0LE1 fichier < N%LL3 fichier < fo&en(6test$txt6, 6D6#3 if (fichier @< N%LL# 2 f&utc('!', fichier#3AAEcriture du caract,re !fclose(fichier#3 5

"me =ar'ouri$:

TP N 1
Fvrier 2012 return 435

Etude thorique

Fputs
Protot)&e de la fonction char! fputs"const char! chaine$ FIL ! pointeur3urFichier%& Exem&le int main(# 2 /0LE1 fichier < N%LL3 fichier < fo&en(6test$txt6, 6D6#3 if (fichier @< N%LL# 2 f&uts(6:alut "0P* 6, fichier#3 fclose(fichier#3 5 return 43 5

Fprintf
int main(# 2 /0LE1 fichier < N%LL3 int a'e < 43 fichier < fo&en(6test$txt6, 6D6#3 if (fichier @< N%LL# 2 AA 7n demande l'E'e &rintf(6Fuel a'e ave9Cvous G 6#3 scanf(6Hi6, Ia'e#3 AA 7n l'crit dans le fichier f&rintf(fichier, 6Le "onsieur qui utilise le &ro'ramme, il a Hd ans6, a'e#3 fclose(fichier#3 5 return 435

4.
1 $ + $ J $

Lire dans un fichier


f ' e t c - lit un caract,re f ' e t s - lit une chaBne f s c a n f - lit une chaBne formate

Fgetc
int f'etc(/0LE1 &ointeurKe/ichier#3 int main(# 2 /0LE1 fichier < N%LL3char caractere!ctuel 3 fichier < fo&en(6test$txt6, 6r6#3 if (fichier @< N%LL# 2 AA Loucle de lecture des caract,res un . undo2 caractere!ctuel < f'etc(fichier#3 AA 7n lit le caract,re &rintf(6Hc6, caractere!ctuel#3 AA 7n l'affiche5Dhile (caractere!ctuel @< E7/#3 AA 7n continue tant que f'etc n'a &as retourn E7/ (fin de fichier#fclose(fichier#35 return 43

"me =ar'ouri$:

TP N 1
Fvrier 2012 5

Etude thorique

Fgets
Protot5pe :char! fgets"char! chaine$int nombre#eCaracteres6Lire$FIL !pointeur3urFichier%& Exem&le

Mdefine T!0LLEN"!O 1444 AA Tableau de taille 1444 int main(# 2 /0LE1 fichier < N%LL3 char chainePT!0LLEN"!O>1Q < 663 AA *haBne vide de taille T!0LLEN"!Ofichier < fo&en(6test$txt6, 6r6#3 if (fichier @< N%LL# 2 f'ets(chaine, T!0LLEN"!O, fichier#3 AA 7n lit maximum T!0LLEN"!O caract,res du fichier, on stocRele tout dans 6chaine6&rintf(6Hs6, chaine#3 AA 7n affiche la chaBne fclose(fichier#3 5 return 43 5 Exem&le

Mdefine T!0LLEN"!O 1444 intmain(# 2 /0LE1 fichier < N%LL3 char chainePT!0LLEN"!OQ < 663fichier < fo&en(6test$txt6, 6r6#3 if (fichier @< N%LL# 2 Dhile (f'ets(chaine, T!0LLEN"!O, fichier# @< N%LL#AA 7n lit le fichier tant qu'on ne reSoit &as d'erreur (N%LL# 2&rintf(6Hs6, chaine#3 AA 7n affiche la chaBne qu'on vient de lire5fclose(fichier#3 5 return 43 5

Fscanf
int main(# 2 /0LE1 fichier < N%LL3int scorePJQ < 24,4,453 AA Tableau des J meilleurs scoresfichier < fo&en(6test$txt6, 6r6#3 if (fichier @< N%LL# 2 fscanf(fichier, 6Hd Hd Hd6, IscoreP4Q, IscoreP1Q, IscoreP+Q#3 &rintf(6Les meilleurs scores sont - Hd, Hd et Hd6, scoreP4Q,scoreP1Q, scoreP+Q#3 fclose(fichier#3 5 return 43 5

"me =ar'ouri$:

TP N 1
Fvrier 2012

Etude thorique

III.

3e dplacer dans un fichier

0l existe J fonctions . connaBtre 1 $ f t e l l - indique . quelle &osition vous (tes actuellement dans le fichier +$fseeR -&ositionne le curseur . un endroit &rcis J$reDind -remet le curseur au dbut du fichier (c'est quivalent . demander . la fonction fseeR de &ositionner le curseur au dbut#$

1. ftell:position dans le fichier


lon' ftell(/0LE1 &ointeur:ur/ichier#3 Le nombre renvo) indique donc la &osition du curseur dans le fichier

4. fsee7 : se positionner dans le fichier


intfseeR(/0LE1 &ointeur:ur/ichier,lon' d&lacement, int ori'ine#3 La fonction fseeR &ermet de d&lacer le 6curseur6 d'un certain nombre de caract,res (indiqu &ar d&lacement# . &artir de la Position indique &ar ori'ine emarque 3 3 3 Le nombre d&lacement &eut (tre un nombre &ositif (&our se d&lacer en avant#, nul (< 4# ou n'atif (&our se d&lacer en arri,re#$ Fuant au nombre ori'ine, vous &ouve9 mettre comme valeur l'une des J constantes ('nralement des dfinies# listes ciCdessous -

893 / - indique le dbut du fichier$ 89C:' - indique la &osition actuelle du curseur$ 89 2# - indique la fin du fichier

Exem&le Le code suivant &lace le curseur + caract,res a&r,s le dbut fseeR(fichier, +, :EEUN:ET#3 Le code suivant &lace le curseur T caract,res avant la &osition courante fseeR(fichier, CT, :EEUN*% #3

1. 'e)ind : retour au dbut


void reDind(/0LE1 &ointeur:ur/ichier# 3

I0.

'enommer et supprimer un fichier

0nt rename (const char1 ancienNom,const char1 nouveauNom# 3 0nt remove(const char1 nom fichier!su&&rimer# 3

"me =ar'ouri$:

Вам также может понравиться