Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ouvrir et lire un fichier en C

Impossible de lire un fichier.txt

    13 juillet 2021 à 15:01:31

    Bonjour à tous,

    Je bloque depuis une heure sur un sujet très basique. Après avoir débuté la partie "Lire et écrire dans des fichiers" du cours de C, je me retrouve face à un problème. Voici ce que j'ai fait :

    - J'ai créé cette fonction afin d'ouvrir et lire les caractères d'un fichier texte nommé "test.txt" :

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        FILE * fp;
    
        fp = fopen("test.txt", "r");
        if (fp == NULL)
        {
            printf("Erreur fopen\n");
            return 1;
        }
        char c = fgetc(fp);
        while (c != EOF){
            printf("%c", c);
            c = fgetc(fp);
        }
    
        return 0;
    }
    

    Ensuite, si j'ai bien compris la leçon, il suffit que mon fichier "test.txt" soit contenu dans le même dossier que mon executable .exe. Mais c'est la ou j'ai eu mon premier doute.

    > Je travail sous Code::blocks, et mon .exe se créé à chaque fois dans des sous-dossier de mon dossier de base (qui contient le main en .c, le .cbp etc).

    En d'autres termes, j'ai un premier fichier nommé "interactionFichier" que j'ai créé lorsque je fais un nouveau projet Code::blocks.

    interactionFichier comporte :

    - un dossier "bin"

    - un dossier "obj" (qui contient lui même un fichier debug, qui contient en son sein un main.o)
    - mon main.c, un .layout, un .depend (je ne sais pas ce que sont ces deux derniers fichiers).

    Et l'arborescence pour accéder à mon .exe est la suivante :

    interactionFichier > bin > debug > interactionFichier.exe

    je place donc mon fichier test.txt dans le même dossier que "interactionFichier.exe" comme l'explique le cours, mais mon programme renvoie toujours la mention "erreur fopen" (il s'agit du printf de mon programme), ce qui signifie que le fichier n'est même pas lu, c'est bien ça ?

    N'étant pas lu, je n'arrive pas à l'afficher lors de la compilation. J'ai testé de placer le fichier .txt à divers endroits, sans aucun succès.

    Voila, ca fait beaucoup d'explication pour un si petit problème qui doit être relié à quelque chose de tout bête, mais j'avoue être bloqué depuis 1h. La tâche n'a pas l'air insurmontable,mais je m'en remet à vous car je ne comprend pas ce qu'il se passe.

    • Partager sur Facebook
    • Partager sur Twitter
      13 juillet 2021 à 16:47:02

      Bonjour ! Une solution pourrait être d'indiquer le chemin complet du fichier.
      • Partager sur Facebook
      • Partager sur Twitter
        13 juillet 2021 à 17:40:44

        J'ai tenté, mais j'ai toujours eu le retour d'erreur.

        J'ai indiqué des chemins comme : bin/debug/test.txt (vu que le .exe se trouve dans le dossier debug).

        • Partager sur Facebook
        • Partager sur Twitter
          13 juillet 2021 à 17:50:34

          Le chemin complet veut dire à partir de la racine:
          Sur Windows:
          C:\Users\mon_nom\Documents\...\bin\... jusqu'à l'exécutable
          Sur Linux, ça pourrait avoir l'air de ceci:
          /home/mon_nom/.../bin/... jusqu'au fichier
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            13 juillet 2021 à 17:55:13

            1. Ce n'est pas le répertoire où se trouve l'exécutable, mais celui d'où il est lancé.

            => avec un IDE, le répertoire courant souvent celui qui est au dessus de "bin".

            2. Pour clarifier la question, faire un petit programme qui ECRIT un fichier texte.  Comme ça il n'y a plus qu'à regarder où il a été créé.

            3. Une erreur fréquente : avoir oublié que windows, si on ne fait pas attention, ajoute un suffixe aux noms des fichiers créés avec le notepad. On se retrouve avec test.txt.txt

            -
            Edité par michelbillaud 13 juillet 2021 à 17:55:50

            • Partager sur Facebook
            • Partager sur Twitter
              13 juillet 2021 à 18:10:10

              PierrotLeFou a écrit:

              Le chemin complet veut dire à partir de la racine:
              Sur Windows:
              C:\Users\mon_nom\Documents\...\bin\... jusqu'à l'exécutable
              Sur Linux, ça pourrait avoir l'air de ceci:
              /home/mon_nom/.../bin/... jusqu'au fichier

              Pour répondre à Pierrot, (je suis dans le train et mon post d'avant n'est pas passé)

              j'ai également essayé avec ces emplacements :

              fp = fopen("C:\\mesprogrammesc\\premierprogrammec\\interactionFichier2\\bin\\Debugtest.txt", "r");

              fp = fopen("C:\\mesprogrammesc\\premierprogrammec\\interactionFichier2\\test.txt", "r");

              Je n'ai pas réussi.

              MichelBillaud => Merci pour la précision. Cela veux dire que l'executable peux être lancé d'un autre endroit que le dossier naturellement créé par Code::Blocks ?

              Je vais également voir pour le suffixe si ça ne viens pas de ça, et sinon j'essaierai de faire une fonction qui créé un fichier afin de voir ou il se stock. Merci pour les pistes :)

              Bonne soirée à vous

              -
              Edité par BetaDuCentaure 13 juillet 2021 à 18:12:12

              • Partager sur Facebook
              • Partager sur Twitter
                13 juillet 2021 à 18:11:11

                Ha oui? Notepad ne fait pas ça sur mon ordi si je met une extension.
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  13 juillet 2021 à 18:14:58

                  Merci beaucoup Michel, c'était exactement ça ! En mettant test.txt.txt, le fichier est bien lu par ma fonction.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 juillet 2021 à 18:20:56

                    Dans ton explorateur de fichier, décoche l'option : "Masquer l’extension des fichiers connus" comme cela tu verras les noms de fichiers en entier avec leur extension.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 juillet 2021 à 18:23:24

                      Il faut croire que j'ai trafiqué mon ordi.
                      Si je met  test.txt ça donne test.txt
                      Si je met  test.k ça donne test.k.txt
                      Si je met  test.jpg ça donne test.jpg
                      Notepad regarde si l'extension est dans la liste des extensions. S'il ne la trouve pas, il ajoute .txt
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Le Tout est souvent plus grand que la somme de ses parties.

                        13 juillet 2021 à 18:37:50

                        C'est fait Rouloude, merci pour l'astuce : c'est plus clair ainsi.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 juillet 2021 à 2:00:02

                          Je ne sais pas si on a le même Windows 10 ...
                          Je peux mettre dans le fopen le chemin avec des '/' au lieu de '\'. Comme ça, je n'ai pas besoin de les doubler.
                          Je travaille sous cmd, pas dans un IDE.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Le Tout est souvent plus grand que la somme de ses parties.

                          Ouvrir et lire un fichier en C

                          × 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