[C]Modification a l'interieur d'un fichier
Nescence
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je developpe un petit programme en C manipulant des fichiers, je souhaite modifier une donnée a l 'interieur de ce fichier:
Par exemple , soit un fichier avec la structure suivante:
struct
{
chaine nomfichier;
entier nombre d'exemplaire;
}
un utilisateur saisit un nom de film et un nombre d'exemplaires. Si le film est deja référencé dans le fichier je souhaiterais seulement pouvoir modifier le nombre d'exemplaire.
Helas il me semble que en C, le pointeur ne se replace pas automatiquement.
Ayant éffectuer plusieur recherches j'ai trouvé deux fonctions : fseek et ftell mais j 'éprouve quelque difficultées a les utiliser.
Si quelqu'un avait une solution, ou un exemple de code qui pouvait m'aider, merci d 'avance!
Je developpe un petit programme en C manipulant des fichiers, je souhaite modifier une donnée a l 'interieur de ce fichier:
Par exemple , soit un fichier avec la structure suivante:
struct
{
chaine nomfichier;
entier nombre d'exemplaire;
}
un utilisateur saisit un nom de film et un nombre d'exemplaires. Si le film est deja référencé dans le fichier je souhaiterais seulement pouvoir modifier le nombre d'exemplaire.
Helas il me semble que en C, le pointeur ne se replace pas automatiquement.
Ayant éffectuer plusieur recherches j'ai trouvé deux fonctions : fseek et ftell mais j 'éprouve quelque difficultées a les utiliser.
Si quelqu'un avait une solution, ou un exemple de code qui pouvait m'aider, merci d 'avance!
A voir également:
- [C]Modification a l'interieur d'un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
Salut,
ftell te donne la position courante dans le fichier en octets depuis le debut.
Il retourne une valeur de type long il me semble et il prend en paramètre un pointeur de fichier (une structure de type FILE *).
Donc pour l'utiliser, c'est comme ça:
fseek() te sert à changer ta position courante dans le fichier.
Il ya 3 paramètres.
1 er: pointeur vers fichier
2 ème: position à atteindre
3 ème: Type de déplacement
La position à atteindre est en octet (pour info un caractère = un octet).
Pour le type de déplacement tu as le choix entre SEEK_SET, SEEK_CUR et SEEK_END
Si tu utilises SEEK_SET, fseek fera pointer le fchier vers telle position absolue (si tu mets 1 en position, tu ira au premier octet du fichier).
Avec SEEK_CUR, fseek fera pointer vers telle position relative, c'est à dire à partir de la position courante (si tu mets 1 en position et que tu es à l'octet 5, fseek fera pointer le fichier vers 6).
Avec SEEK_END, le fichier pointera vers telle position en partant de la fin.
Exemple pour connaitre la taille du fichier prout.txt dans le repertoire courant:
ftell te donne la position courante dans le fichier en octets depuis le debut.
Il retourne une valeur de type long il me semble et il prend en paramètre un pointeur de fichier (une structure de type FILE *).
Donc pour l'utiliser, c'est comme ça:
long pos; pos=ftell(file);
fseek() te sert à changer ta position courante dans le fichier.
Il ya 3 paramètres.
1 er: pointeur vers fichier
2 ème: position à atteindre
3 ème: Type de déplacement
La position à atteindre est en octet (pour info un caractère = un octet).
Pour le type de déplacement tu as le choix entre SEEK_SET, SEEK_CUR et SEEK_END
Si tu utilises SEEK_SET, fseek fera pointer le fchier vers telle position absolue (si tu mets 1 en position, tu ira au premier octet du fichier).
Avec SEEK_CUR, fseek fera pointer vers telle position relative, c'est à dire à partir de la position courante (si tu mets 1 en position et que tu es à l'octet 5, fseek fera pointer le fichier vers 6).
Avec SEEK_END, le fichier pointera vers telle position en partant de la fin.
Exemple pour connaitre la taille du fichier prout.txt dans le repertoire courant:
#include <stdio.h> int main(int argc, char **argv) { FILE *fichier; long taille; fichier=fopen("./prout.txt","r"); if (fichier!=NULL){ fseek(fichier, 0, SEEK_END); //On se positionne à la fin du fichier /*On prend la position courante (on est à la fin, donc la position == taille du fichier) */ taille=ftell(fichier); fclose(fichier); printf("prout.txt fait %d octets\n",taille) } else{ printf("Peut pas ouvrir le fichier\n"); } return 0; }
tu nous sauves la vie.