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

Fermé
Nescence - 11 janv. 2006 à 16:31
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 15 mai 2009 à 15:38
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 janv. 2006 à 23:05
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
15 mai 2009 à 14:30
Merci pour tes informations sur ftell !
tu nous sauves la vie.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
15 mai 2009 à 15:38
Attention à l'insertion, si tu as plus de 9 films il peut y avoir des souci si tu ne fait pas attention.
0