• Aucun résultat trouvé

Renommage d’un fichier

N/A
N/A
Protected

Academic year: 2022

Partager "Renommage d’un fichier"

Copied!
4
0
0

Texte intégral

(1)

Architecture & Syst`eme Rappels sur la manipulation des fichiers en langage C (via les pointeurs sur les fichiers) Dans ce document sont rappel´ees les notions fondamentales quant `a la manipulation des fichiers en langage C.

En C, un fichier est une suite d’octets. Les informations contenues dans un fichier ne sont pas forc´ement du mˆeme type (il peut y avoir un char, un int, une struct, etc.).

Les op´erations disponibles en C pour manipuler des fichiers sont les suivantes : cr´eation, ouverture, fermeture, lecture, ´ecriture, destruction, renommage. La plupart des fonctions permettant de manipuler les fichiers sont dans la biblioth`eque standard stdio.h.

D´ eclaration d’un fichier

FILE *f1 ;

On d´efinit un pointeurf1 vers un fichier (`a noter que “ FILE ” doit imp´erativement ˆetre en majuscules). Ce pointeur fournit l’adresse d’un enregistrement du fichier.

Remarquons qu’il existe des fichiers sp´eciaux : la sortie standard est le fichier stdout et l’entr´ee standard stdin.

Ouverture d’un fichier

FILE *fopen(char *nom, char *mode) ;

Il y a deux chaˆınes de caract`eres en argument (nom et mode). La chaˆıne nom correspond au chemin du fichier que l’on souhaite ouvrir. Par exemple : sous Windows,

"a:\toto.dat"

Quant `a la chaˆıne mode,il s’agit du mode d’acc`es aux fichiers. Pour des fichiers texte : – "r" : lecture seule ;

– "w" : ´ecriture seule (destruction de l’ancienne version si elle existe) ; – "w+" : lecture/´ecriture (destruction de l’ancienne version si elle existe) ;

– "r+": lecture/´ecriture d’un fichier existant (mise `a jour). Pas de cr´eation d’une nouvelle version ;

– "a+": lecture/´ecriture d’un fichier existant (mise `a jour), pas de cr´eation d’une nouvelle version, le pointeur (de lecture/´ecriture) est positionn´e `a la fin du fichier.

Pour les fichiers binaires : – "rb" : lecture seule ;

– "wb" : ´ecriture seule (destruction de l’ancienne version si elle existe) ; – "wb+" : lecture/´ecriture (destruction de l’ancienne version si elle existe) ;

– "rb+" : lecture/´ecriture d’un fichier existant (mise `a jour). Pas de cr´eation d’une nou- velle version ;

– "ab+" : lecture/´ecriture d’un fichier existant (mise `a jour), pas de cr´eation d’une nou- velle version, le pointeur (de lecture/´ecriture) est positionn´e `a la fin du fichier.

A l’ouverture, le pointeur est positionn´` e au d´ebut du fichier (sauf pour les modes"a+"et

"ab+"). Par exemple,

1

(2)

FILE *fichier ;

fichier=fopen("toto.dat","rb") ;

Fermeture d’un fichier

int fclose (FILE *fichier) ;

Retourne 0 si la fermeture s’est bien pass´ee, EOF en cas d’erreur (par exemple, la ferme- ture d’un fichier non pr´ealablement ouvert ...). Il faut toujours fermer un fichier `a la fin de son utilisation. Par exemple :

FILE *fichier ;

fichier=fopen("/tata/tutu/toto.txt","r") ; /* Ici les instructions de traitements ... */

fclose (fichier) ;

Destruction d’un fichier

int remove (char *nom) ;

Retourne 0 si destruction s’est bien pass´ee. Par exemple : remove("/tata/tutu/toto.txt") ;

Renommage d’un fichier

int rename(char *oldname, char *newname) ;

Retourne 0 si le renommage s’est correctement pass´e.

Positionnement du pointeur au d´ ebut du fichier

void rewind (FILE *fichier) ;

Evidemment il faut que le fichier ait d´´ ej`a ´et´e ouvert.

Ecriture dans un fichier ´

int fputc (char c, FILE *fichier) ;

Ecrit la valeur de´ c`a la position courante du pointeur, puis le pointeur avance d’une case m´emoire. Par exemple,

fputc (’A’,fichier) ;

2

(3)

On peut ´egalement ´ecrire une chaˆıne de caract`eres dans un fichier par fprintf(FILE *fichier,char *format,...) ;

Par exemple, int x ; x=5 ;

fprintf (fichier,"x=%d et %s",x,"erreur de calcul") ;

permet d’´ecrire la chaˆıne"x=5 et erreur de calcul"dans le fichier (sur lequel pointe) fichier.

Lecture dans un fichier

int fgetc (FILE *fichier) ;

Lit un caract`ere, mais retourne un entier (retourne EOF si erreur en fin de fichier) puis le pointeur avance d’une case. Par exemple,

char c ;

c=(char)fgetc(fichier) ;

On peut ´egalement lire une chaˆıne de caract`eres. Pour cela on utilise int fscanf(FILE *fichier,char *format,...)

Le troisi`eme argument est un pointeur. Si on utilise comme format"%as"alors on r´ecup`ere une chaˆıne de caract`eres jusqu’`a un espace ou un saut de ligne, et l’option apermet d’al- louer la m´emoire n´ecessaire pour stocker la chaˆıne trouv´ee. La valeur renvoy´ee est EOF si la fonction a echou´e. ´Evidemment le pointeur se d´eplace `a la chaˆıne suivante. Par exemple, FILE *f ;

f=fopen("/toto.txt","r") ; char *buffer ;

fscanf(f,"%as",&buffer) ;

Dans cet exemple, la chaˆıne lue par le fscanf est stock´ee dans la chaˆıne buffer.

D´ eplacement dans un fichier

Les fonctions utilis´ees jusqu’ici parcourent un fichier s´equentiellement du d´ebut `a la fin, en d´epla¸cant implicitement un curseur dans le fichier. On peut jouer avec ce curseur grˆace `a la fonction int fseek(FILE *flot, long decalage, int origine). La valeur renvoy´ee est 0 en cas de succ`es, autre chose sinon. Cette fonction permet de se positionner enorigine +decalage. Le param`etre decalage est exprim´e en octets et originepeut prendre les 3 valeurs suivantes :

– SEEK SET : d´ebut du fichier ; – SEEK CUR : position courante ; – SEEK END : fin du fichier ;

3

(4)

Pour connaˆıtre la position courante `a partir du d´ebut du fichier, on utiliselong ftell(FILE

*f).

4

Références

Documents relatifs

– Après chaque opération de lecture ou d'écriture, ce pointeur de position (défini dans FILE) est incrémenté du nombre de blocs transférés pour indiquer la prochaine opération

Cette commande permet de copier un fichier vers un autre r´epertoire (avec ou sans renommage) et de copier plusieurs fichiers vers un mˆeme r´epertoire (sans renommage).. $ cp

[r]

• (a) and (b) dominent la production de paire “nucl´ eaire” (dans le champ d’un noyau) de par les rapports de masse e/r... “Longueur de Radiation”

´ Ecrire une fonction qui teste si deux arbres sont ´ egaux ` a rotation pr` es (on pourra dans un premier temps le faire dans le cas o` u tout noeud interne a exactement 2

3 Op´ erations ´ el´ ementaires sur les lignes et colonnes d’une ma- trices.. 3.3 Test d’inversibilit´e d’une matrice et calcul

puisqu’on sait faire des combinaisons lin´ eaires de matrices, on sait d´ efinir les relations lin´ eaires entre matrices... Syst` emes libres

La r´ esolution d’un syst` eme d’´ equations lin´ eaires se traduit matriciellement par Ax = b o` u A est une matrice, b un vecteur et x l’inconnue. R´ esoudre donc Ax = b,