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 :

fichier vide ou non


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 92
    Points : 45
    Points
    45
    Par défaut fichier vide ou non
    j'ouvre dans mon code plusieurs fichiers texte, et je met une condition pour vérifier si le fichier n'est pas vide, mais ca ne marche pas , meme s'il est vide ca passe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FILE *filtres;
    filters=fopen("filters.txt","r");
    if (filters!=NULL)
    {
    ...
    }
    apparement mon test n'est pas correct

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Ton test vérifie seulement si l'ouverture du fichier fonctionne ou non, pas si le fichier est vide...

    Les raisons pour lesquels fopen peut échouer (et donc retourner NULL):

    EINVAL Le mode fourni à fopen, fdopen, ou freopen était
    invalide.

    Les fonctions fopen, fdopen et freopen peuvent également
    échouer et positionner dans errno une des erreurs suscep*
    tibles de se produire avec malloc(3).

    La fonction fopen peut aussi échouer et positionner dans
    errno une des erreurs susceptibles de se produire avec
    open(2).

    La fonction fdopen peut aussi échouer et positionner dans
    errno une des erreurs susceptibles de se produire avec
    fcntl(2).

    La fonction freopen peut aussi échouer et positionner dans errno
    une des erreurs susceptibles de se produire avec open(2) , fclose(3)
    et fflush(3) .

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    man fopen :
    S'il réussissent intégralement fopen, fdopen et freopen renvoient un pointeur sur un fichier, de type FILE. Sinon, ils renvoient NULL et errno contient le code d'erreur.
    Un fichier vide n'est pas une cause d'echec pour la fonction fopen. Pour déterminer la taille d'un fichier, il est possible d'utiliser fseek et ftell.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Regarde du cote de ftell

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    une erreur évidente dans le petit morceau de code : tu déclare un variable FILE* filtres et ensuite tu utilises "filters". Les deux variables ne sont pas les memes.

    FILE *filters;
    filters=fopen("filters.txt","r");
    if (filters!=NULL)

    cela me semble mieux.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Je pensais a quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!(fd = open(filename, O_RDONLY)))
      exit(1);
    if (lseek(fd, -1, SEEK_END) == -1)
      printf("Fichier vide\n");

  7. #7
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Citation Envoyé par ByDooWeeDoo
    Je pensais a quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!(fd = open(filename, O_RDONLY)))
      exit(1);
    if (lseek(fd, -1, SEEK_END) == -1)
      printf("Fichier vide\n");
    open() et lseek() ne sont pas standards.
    Sinon, y'a plusieurs façons, plus ou moins fantaisistes, pour savoir si un fichier est vide, une d'elle ayant déjà été donnée.

    Nas'

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

Discussions similaires

  1. fichier vide ou non ?
    Par siempre dans le forum C
    Réponses: 10
    Dernier message: 29/09/2009, 15h34
  2. Réponses: 15
    Dernier message: 30/08/2008, 10h01
  3. tester un fichier sur k7 : vide ou non
    Par sam01 dans le forum z/OS
    Réponses: 5
    Dernier message: 01/04/2008, 00h03
  4. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57
  5. Mysqldump donnant un fichier vide
    Par simoryl dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 15/02/2005, 16h42

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