[C]Modification a l'interieur d'un fichier

Nescence -  
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!
A voir également:

2 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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:
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;
}
2
Etudiants54
 
Merci pour tes informations sur ftell !
tu nous sauves la vie.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Attention à l'insertion, si tu as plus de 9 films il peut y avoir des souci si tu ne fait pas attention.
0