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 :

Que faire lorsque le fichier est vide?


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut Que faire lorsque le fichier est vide?
    Bonjour,

    Je voulais vous demandé votre avis sur ce petit bout de programme qui ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        if (flecture == NULL){
            printf("Le fichier que vous chercher a lire est vide\n");
            fclose(flecture);
            fclose(fecriture);
            return (EXIT_FAILURE);
        }
    Je ne comprends vraiment pourquoi cela ne fonctionne pas...

    Merci...

    Ps: flecture est le fichier que je lis (ouvert en mode "r")
    fecriture est fichier dans lequel j'écris (ouvert en mode "w")

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par bsangoku Voir le message
    Bonjour,

    Je voulais vous demandé votre avis sur ce petit bout de programme qui ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        if (flecture == NULL){
            printf("Le fichier que vous chercher a lire est vide\n");
            fclose(flecture);
            fclose(fecriture);
            return (EXIT_FAILURE);
        }
    Je ne comprends vraiment pourquoi cela ne fonctionne pas...

    Merci...

    Ps: flecture est le fichier que je lis (ouvert en mode "r")
    fecriture est fichier dans lequel j'écris (ouvert en mode "w")
    Salut
    Fais voir la ligne d'ouverture du fichier. vérifies si t'as pas bien initialiser flecture par l'ouverture du fichier

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    Citation Envoyé par bsangoku Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if (flecture == NULL){
     
            fclose(flecture);
     
        }
    attention, ne fais pas un fclose sur flecture !! vu qu'il est NULL.
    Une hypoyhèse sur ton pb : si ton fichier existe réellement, il est peut-etre en cours d'utilisation par une autre appli.

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 339
    Points
    2 339
    Par défaut
    Ce bout de programme me parait tres etrange.

    Un FILE* equivalent a NULL ne signifie pas que le fichier est vide, mais que le pointeur est non initialisé.

    Si cela suit un fopen, cela veut certainement dire qu'il y a eu un probleme a l'ouverture. Le message d'erreur générer par fopen (fonction standart) est alors affichable via la fonction perror()


    Faire un fclose sur FILE* equivalent a NULL n'a aucun impact. C'est juste qu'au vu du test, c'est inutile.

    Il y a un multitude de raison pour lequel ton fichier pourrait ne pas s'ouvrir. Utilise perror imperativement pour savoir.

  5. #5
    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
    Pour tester si un fichier est vide :
    - Ouvrir le fichier (f) en mode binaire. Si réussite (f != NULL) :
    - Lire un caractère.
    - Si Echec de lecture ET feof(f), il n'y a aucun caractère à lire => le fichier est vide. Sinon le fichier n'est pas vide.
    - Fermer le fichier.

    Autre technique :
    - Si taille du fichier == 0, le fichier est vide. Sinon il n'est pas vide.

    Voir tutoriels et FAQ pour plus d'explications.

    Citation Envoyé par SofEvans
    Faire un fclose sur FILE* equivalent a NULL n'a aucun impact.
    La norme ne dit rien de tel. Sur ma machine, fclose(NULL) provoque un joli plantage.

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 339
    Points
    2 339
    Par défaut
    Citation Envoyé par Melem Voir le message
    La norme ne dit rien de tel. Sur ma machine, fclose(NULL) provoque un joli plantage.
    Ah tiens, je pensais pourtant. Merci de cette precision.

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Melem Voir le message
    Autre technique :
    - Si taille du fichier == 0, le fichier est vide. Sinon il n'est pas vide.
    Solution largement préférable à mon sens, étant donné qu'au moins, elle n'implique pas une erreur pour détecter le fait que le fichier est vide... Pour ça, appeler la fonction fstat, et vérifier le champ stat.st_size, ou alors utiliser la combinaison fseek/ftell comme l'indique la FAQ.

Discussions similaires

  1. Réponses: 26
    Dernier message: 23/12/2009, 17h33
  2. Que renvoie Access lorsqu'un champ est vide?
    Par jamesleouf dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 21/05/2008, 15h28
  3. Que faire lorsqu'une surface est détruite ?
    Par gege2061 dans le forum SDL
    Réponses: 11
    Dernier message: 18/07/2007, 14h27
  4. Que faire lorsque la résolution d'écran est mauvaise ?
    Par gifffftane dans le forum Administration système
    Réponses: 2
    Dernier message: 13/06/2007, 22h30
  5. Que faire lorsque les performances d'une base chute ?
    Par Doctor Z dans le forum Oracle
    Réponses: 11
    Dernier message: 16/02/2005, 14h38

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