IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

indentifier la fin d'un fichier


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 17
    Points : 14
    Points
    14
    Par défaut indentifier la fin d'un fichier
    Salut à tous, j'ai un petit souçis pour "reconnaitre" la fin d'un fichier.
    Je m'explique: j'ai réalisé un petit programme qui calcule la taille d'un fichier donné.

    Pour ce faire, j'utilise une boucle dans laquelle la fonction fgetc lit l'octet actuel (sa commence donc au début) et j'incrémente le nombre d'octet lu, jusqu'à ce que fgetc retourne EOF. Je connait donc la taille d'un fichier.

    (Je conviens que c'est un programme qui ne sert strictement à rien puisque des fonctions déja toutes faites permettent de connaitre la taille d'un fichier)

    Seulement voila, EOF équivaut à 0xFF, ce qui signifie qu'à chaque fois qu'un octet aura cette valeur, mon programme s'arrêtera là, estimant qu'il s'agit de la fin du fichier.

    Je voulais donc savoir s'il n'y a pas une méthode plus logique qu'EOF pour connaitre la fin du fichier.

    Voici un extrait du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    do {
             taille_fichier ++;
             caractere_actuel=fgetc(fichier);
             printf ("j'ai lu %d octets et le caractere actuel en hexa est %0x\n", taille_fichier, caractere_actuel,);
             } while (caractere_actuel!= EOF);
     
             printf ("la taille du fichier fait %d octets", taille_fichier-1);
             }

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Points : 169
    Points
    169
    Par défaut
    Pour connaître la taille d'un fichier tu peux utiliser :


    D'abords tu place le curseur a la fin du fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rewind(*handleFichier);//remet le curseur au début
    fseek(*handleFichier,0,SEEK_END);//met le curseur a la fin
    Ensuite tu utilise une fonction qui te retourne OU se trouve le curseur dans le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tailleFichier=ftell(*handleFichier);
    Maintenant tailleFichier contient la taille de ton fichier !

    Bonne chance

    Ha oui. N'oublie pas de faire un petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rewind(*handleFichier);
    Pour pouvoir manipuler le contenu par la suite

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    EOF est un int pas un char. getc retourne un int (tantôt un char ('a', 'b', 0xFE, 0xFF, etc.) tantôt un int (EOF !)) pas un char. int caractere_actuel;. On teste fgetc avant d'utiliser la valeur retournée. remplace donc ton d par un while ....

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bluffant.. J'ai pas l'habitude de trainer sur des forums mais j'ai l'impression que les réponses ne se font pas attendre sur celui-ci.

    Merci à vous deux pour avoir répondu bien que cela soit Melem qui ait compris mon probleme.
    Bien vu, l'erreur était toute bête.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour compléter: EOF n'équivaut pas à 0xFF, mais à 0xFFFFFFFF (sur une architecture x86, du moins).

    D'où la nécessité du int, comme indiqué par Melem.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 26/09/2006, 01h36
  2. Détecter la fin d'un fichier wav
    Par francky23012301 dans le forum Delphi
    Réponses: 4
    Dernier message: 18/07/2006, 09h01
  3. Lecture de la fin d'un fichier
    Par choubiroute dans le forum Langage
    Réponses: 11
    Dernier message: 21/06/2006, 21h49
  4. [Fortran] Lecture de la fin d'un fichier
    Par sebduth dans le forum Fortran
    Réponses: 1
    Dernier message: 02/09/2005, 16h27
  5. Entête et fin d'un fichier PDF
    Par Oluha dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 18/04/2005, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo