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 :

Problème avec feof()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec feof()
    Salut à tous,
    Alors voilà je lit un fichier binaire etje teste avec feof() si c'est la fin du fichier...
    Malheureusement ça marche pas et le programme me retourne toujours des erreurs sans jamais me signaler qu'il est à la fin...

    Voici le code incriminé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    do
    {
            test=fread(&carac,sizeof (char),1,nom);
            if (test<1)
            {
               ferreur(fichier,"lecture");
               exit(EXIT_FAILURE);
            }
            if (i=!feof(nom))
            {                     
               carac=tabfxidec[carac];
               test=fwrite(&carac,sizeof (char),1,nom2);
               if (test<1)
               {
                  ferreur(fichier,"écriture");
                  exit(EXIT_FAILURE);
               }
            }
    }while(i);
    Toutes les variables sont bien sûr déclaré et initialisé...
    Merci d'avance...
    nico

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Problème avec feof()
    Citation Envoyé par nico le terrible
    Alors voilà je lit un fichier binaire etje teste avec feof() si c'est la fin du fichier...
    Mauvaise méthode. Il faut tester la valeur retournée par la fonction de lecture.

    http://emmanuel-delahaye.developpez....s.htm#fichiers

    Malheureusement ça marche pas et le programme me retourne toujours des erreurs sans jamais me signaler qu'il est à la fin...

    Voici le code incriminé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    do
        {
        test=fread(&carac,sizeof (char),1,nom);
        if (test<1)
    Je ne suis pas sûr que fread() retourne un int < 0 en cas d'erreur...
    Citation Envoyé par ISO/IEC 9899:1999 (E)
    7.19.8.1 The fread function
    Synopsis
    1 #include <stdio.h>
    size_t fread(void * restrict ptr,
    size_t size, size_t nmemb,
    FILE * restrict stream);
    Description
    2 The fread function reads, into the array pointed to by ptr, up to nmemb elements
    whose size is specified by size, from the stream pointed to by stream. For each
    object, size calls are made to the fgetc function and the results stored, in the order
    read, in an array of unsigned char exactly overlaying the object. The file position
    indicator for the stream (if defined) is advanced by the number of characters successfully
    read. If an error occurs, the resulting value of the file position indicator for the stream is
    indeterminate. If a partial element is read, its value is indeterminate.
    Returns
    3 The fread function returns the number of elements successfully read, which may be
    less than nmemb if a read error or end-of-file is encountered. If size or nmemb is zero,
    fread returns zero and the contents of the array and the state of the stream remain
    unchanged.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        {
            ferreur(fichier,"lecture");
            exit(EXIT_FAILURE);
        }
        if (i=!feof(nom))
    Pas bien clair. C'est = ou == ?
    feof() permet de tester si la fin de lecture est due à une fin de fichier, mais pas si c'est du à une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        {                     
        carac=tabfxidec[carac];
        test=fwrite(&carac,sizeof (char),1,nom2);
        if (test<1)
        {
            ferreur(fichier,"écriture");
            exit(EXIT_FAILURE);
        }
        }
        }while(i);
    Toutes les variables sont bien sûr déclaré et initialisé...
    En ce qui concerne le code retourné, je pense que tu confonds fread()/frwite() (ISO-C) avec read()/write() (POSIX.1)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Déjà merci d'avoir répondu...
    Citation Envoyé par Emmanuel Delahaye
    Mauvaise méthode. Il faut tester la valeur retournée par la fonction de lecture.
    j'ai regardé ton lien il donne comme argument de feof() le handle du fichier...

    Citation Envoyé par Emmanuel Delahaye
    Je ne suis pas sûr que fread() retourne un int < 0 en cas d'erreur...
    Je suis d'accord il retourne un entier plus petit que le nombre de truc qu'on a voulut lire, je veut en lire un donc si jamais y'as un prob, ça sera plus petit que 1...

    Citation Envoyé par Emmanuel Delahaye
    Pas bien clair. C'est = ou == ?
    Bon c'est vrai que c'est louche mais j'ai trouvé ça sur un site...
    Au départ j'avais fait une boucle Do While (feof(nom)) ; mais ça ne marchais pas j'ai alors copié un site, lequel est le mieux pense tu (ou vous si d'autre personne lise le sujet )

    Citation Envoyé par Emmanuel Delahaye
    En ce qui concerne le code retourné, je pense que tu confonds fread()/frwite() (ISO-C) avec read()/write()
    je ne vois pas en quoi je me trompe...

    Voilà, merci d'être patient...

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nico le terrible
    Citation Envoyé par Emmanuel Delahaye
    Mauvaise méthode. Il faut tester la valeur retournée par la fonction de lecture.
    j'ai regardé ton lien il donne comme argument de feof() le handle du fichier...
    Mon lien explique surtout que pour detecter la fin de lecture, il faut tester la valeur retournée par la fonction de lecture. Ensuite, et ensuite seulement, on peut (mais ça ne sert à rien) tester feof() pour connaitre la cause de l'arret... Tout ça est déjà écrit... C'est pas clair ou quoi ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci, mon programme fonctionne maitnenant à merveilles .

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nico le terrible
    Merci, mon programme fonctionne maitnenant à merveilles .
    Bien. Alors un petit click sur

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

Discussions similaires

  1. Problème avec la fonction feof ?
    Par kevine2710 dans le forum Débuter
    Réponses: 4
    Dernier message: 28/02/2013, 22h54
  2. Problème avec la fonction feof
    Par Fog-Thunder dans le forum C
    Réponses: 6
    Dernier message: 19/01/2013, 10h54
  3. problème avec feof et fgetc
    Par the_boss003 dans le forum Langage
    Réponses: 4
    Dernier message: 18/03/2009, 13h58
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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