Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fopen refuse d'ouvrir un fichier

    9 janvier 2022 à 14:23:53

    Bonjour, je suis en première année de BUT informatique et je travaille depuis quelques mois sur un projet en C.

    Je dois lire un fichier et créer un annuaire avec.

    Tout a fonctionné normalement pendant des mois mais depuis quelques jours, impossible d'ouvrir le fichier.

    La fonction fopen est elle sensée retourner une erreur ? Car errno reste à 0.

    Edit : J'ai réussi à trouver l'erreur : No such file or directory

    Pourtant le fichier est bien au chemin spécifié, une idée ?

    -
    Edité par SimonMenard 9 janvier 2022 à 14:29:05

    • Partager sur Facebook
    • Partager sur Twitter
      9 janvier 2022 à 15:08:12

      bonjour,

      oui, le fichier que tu crois être au bon endroit n'y est pas …

      De plus, s'il y a une erreur (et apparemment il y en a une) alors le retour de fopen est NULL et errno ne doit pas être nul d'après la doc de fopen que tu as sans doute lue.

      Cette erreur : «No such file or directory» tu l'as obtenue comment ? avec perror ?

      Tu es sous quel environnement ?

      où se trouve ton fichier, comment essayes-tu de l'ouvrir, où le cherches-tu (le chemin est-il relatif ou absolu),  as-tu les droits d'accéder au fichier, … ?

      Parce qu'avec juste ton message il me faudrait une bonne boule de cristal et des dons de voyances pour apporter une réponse adéquate.

      • Partager sur Facebook
      • Partager sur Twitter
        9 janvier 2022 à 16:18:58

        L'erreur je l'ai en faisant ça :

        if (fichier == NULL){
            printf("Erreur : %s\n",strerror(errno));
            exit(EXIT_FAILURE);
        }

         Quand je mets un chemin relatif (le nom du fichier car il est dans le même dossier que mon main), fopen me retourne NULL

        Quand je met le chemin absolu (ce que je ne dois pas faire car il ne sera pas au même endroit lors des test de mon prof), fopen ouvre un fichier mais il semble vide car fgets ne lit rien.

        Je programme en C99 avec Clion

        edit : fgets lit correctement les lignes mais strsep me retourne en boucle des pointeurs null.

        Mon problème principal actuellement c''est que je ne peux pas ouvrir le fichier avec un chemin relatif

        le fichier est au bon endroit, je mets le bon nom à chaque fois.

        -
        Edité par SimonMenard 9 janvier 2022 à 16:22:37

        • Partager sur Facebook
        • Partager sur Twitter
          9 janvier 2022 à 16:55:50

          Pour que ça fonctionne comme tu le souhaite il faut que le répertoire courant soit celui de l'exécutable. Or ce n'est peut-être pas le cas si tu exécutes ton code depuis un EDI.
          • Partager sur Facebook
          • Partager sur Twitter
          ...
            9 janvier 2022 à 17:03:12

            Yes ça a marché merci beaucoup
            • Partager sur Facebook
            • Partager sur Twitter
              9 janvier 2022 à 17:16:40

              SimonMenard a écrit:

              Yes ça a marché merci beaucoup

              Bonjour,

              Sujet résolu

              Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)

              • Partager sur Facebook
              • Partager sur Twitter
                9 janvier 2022 à 17:37:40

                Bonjour,

                Si tu accèdes à un fichier sans en donner le chemin absolu, c'est donc un chemin relatif.

                Mais relatif à quoi? C'est relatif à ce que l'on appelle le "répertoire courant". Le "répertoire courant" peut être changé à tout moment, il vaut par défaut le "répertoire de travail".

                Le "répertoire de travail" c'est quoi? C'est normalement l'endroit d'où est lancé le programme. Ça dépend donc de comment Clion lance ton programme.

                Il y a aussi le "répertoire de l'exécutable" qui n'est pas forcément égal au "répertoire de travail".

                Autrement dit, si tu ne spécifies pas un chemin absolu, ça n'est pas simple de savoir où le fichier sera recherché! Ton prof veut mettre les fichiers là où il veut, mais alors à lui de dire comment retrouver ce répertoire, pose lui la question. Il y a des tas de moyens de résoudre cela, mais si c'est un exercice, l'énoncé doit te fournir cette information. Ça peut être : le prof se charge d'avoir les fichiers dans le "répertoire de travail", et alors ton code marchera chez lui. Et pour qu'il marche chez toi, il faut mettre ces fichiers dans le "répertoire de travail" de Clion.

                Le "répertoire de travail" qu'utilise Clion, il est où? Ça je ne le sais pas. Pour beaucoup d'IDE c'est le "répertoire du projet" qui est peut-être le répertoire au dessus du "répertoire des sources" celui où il y a les fichiers sources de ton programme.

                • Partager sur Facebook
                • Partager sur Twitter

                En recherche d'emploi.

                  9 janvier 2022 à 21:06:41

                  fopen n'est censé définir errno que sur les systèmes POSIX, dans la norme du C c'est pas défini.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  git is great because Linus did it, mercurial is better because he didn't.

                    16 janvier 2022 à 18:41:24

                    Hum le répertoire courant c'est le répertoire de travail (working directory)

                    Qui au début d'une session correspond au HOME directory, qui contient les petites affaires d'un utilisateur.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Fopen refuse d'ouvrir un fichier

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown