• 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

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

• (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”

– 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

[r]

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,

´ 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