Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ouverture d'un fichier

Sujet résolu
    2 novembre 2006 à 10:35:26

    Bonjour :)

    J'essai d'ouvrir un fichier texte dans mon programme mais sa ne m'affiche rien du tout :(

    Je vous affiche le code :
    FILE* fichier = NULL;
                           
                           fichier = fopen("Essai.txt", "a");
                           long lettre = 0;
                           
                           if (fichier != NULL)
                           {
                                       do
                                       {
                                               
                                       lettre = fgetc(fichier);
                                       
                                       printf("%c", lettre);
                                       
                                       }
                                        while(lettre != EOF);
                                       
                                       fclose(fichier);
                           }

    Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      2 novembre 2006 à 10:57:14

      Bonjour,
      tu ouvres ton fichier en mode ajout seul (a),
      essaye de l'ouvrir en mode lecture (r)...pour le lire
      • Partager sur Facebook
      • Partager sur Twitter
        2 novembre 2006 à 11:03:50

        j'ai essayer mais sa ne marche toujours pas :(
        • Partager sur Facebook
        • Partager sur Twitter
          2 novembre 2006 à 11:13:13

          Et c'est quoi ce long lettre !

          T'as déjà vu un long qui permettait d'afficher une lettre surtout avec fgetc, toi ?

          Fgetc renvoie un int (ou un char à vérifier) !!!


          EDIT :
          int fgetc(FILE *stream);
          • Partager sur Facebook
          • Partager sur Twitter
            2 novembre 2006 à 11:21:26

            fgetc renvoie un int (mais selon l'age de l'ordinateur, un int et un long, c'est la même chose).
            Cependant, tu essayes de lire un fichier texte, donc une série de caractères. Un char me semble plus approprié.

            J'ai recopié ton code, et j'ai remplacé fopen("Essai.txt", "a") par fopen("Essai.txt", "r") tout en laissant long lettre et ça fonctionne sans problème.

            Es-tu bien sur que ton fichier n'est pas vide ?
            • Partager sur Facebook
            • Partager sur Twitter
              2 novembre 2006 à 11:28:08

              Citation : Master Thor

              fgetc renvoie un int (mais selon l'age de l'ordinateur, un int et un long, c'est la même chose).
              Cependant, tu essayes de lire un fichier texte, donc une série de caractères. Un char me semble plus approprié.

              J'ai recopié ton code, et j'ai remplacé fopen("Essai.txt", "a") par fopen("Essai.txt", "r") tout en laissant long lettre et ça fonctionne sans problème.

              Es-tu bien sur que ton fichier n'est pas vide ?



              Je sais bien que ce n'était sûrement pas ça qui empêchait la lecture, mais quand une fonction renvoie un type on respecte ce type, ça évite d'avoir un code qui peut buggé.
              • Partager sur Facebook
              • Partager sur Twitter
                2 novembre 2006 à 11:53:27

                FILE* fichier = NULL;

                fichier = fopen("Essai.txt", "r"); /* ouvre en lecture pour lire */
                int lettre = 0; /* long ne sert à rien, long ne sert à rien,
                    long c'est le mal, long provoque l'impuissance,
                    chaque fois que vous utilisez long, Bill Gates tue un bébé
                    dauphin :'( */


                if(fichier != NULL)
                {
                    /* si tu places le test après, tu tentes d'afficher avec printf()
                        le caractère EOF, ce qui est une grosse erreur */

                    while( (lettre = fgetc(fichier)) != EOF)
                    {
                        printf("%c", lettre);
                    }

                    fclose(fichier);
                }
                • Partager sur Facebook
                • Partager sur Twitter
                  2 novembre 2006 à 14:06:50

                  ??? en quoi long est mal ?? quelque soit l'architecture, sa taille est la même, ce qui n'est pas le cas d'un int.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 novembre 2006 à 14:12:11

                    Citation : Master Thor

                    ??? en quoi long est mal ?? quelque soit l'architecture, sa taille est la même, ce qui n'est pas le cas d'un int.



                    int est le type naturel de représentation des entiers en langage C. Beaucoup de personnes utilisent un long au lieu d'un int.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 novembre 2006 à 14:31:03

                      Problème résolu, merci beaucoup, c'était une erreur des plus stupide, je n'avais rien écrit dans mon fichier. :-°

                      Par contre, j'ai un nouveau problème lorsque je veut créer un fichier, rien ne s'écrit dans le fichier. :(

                      Je vous affiche le code :
                      printf("Quel nom voulez vous donner a votre fichier texte ?\n");
                                            char nomFichier[TABLEAU];
                                            scanf("%s", &nomFichier);
                                            printf("\n");
                                           
                                            FILE* creerFichier = NULL;
                                            creerFichier = fopen(nomFichier, "w");
                                            char contenu[100];
                                           
                                            if (nomFichier != NULL)
                                            {
                                                        printf("Le contenu du fichier :\n");
                                                       
                                                        scanf("%s", &contenu);
                                                        fputs(contenu, nomFichier);
                                                       
                                                        fclose(nomFichier);   
                                            }

                      Merci beaucoup par avance de votre aide ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 novembre 2006 à 14:33:06

                        Euh ton flux c'est creerFichier pas nomFichier t'as inversé à partir du if().
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 novembre 2006 à 14:36:02

                          En effet, j'ai inversé mais ce n'est pas sa :(
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 novembre 2006 à 14:37:30

                            Pas de & quand on envoie une chaîne à scanf car le nom d'un tableau est un pointeur sur la première adresse de celui-ci.
                            Et scanf() çäy le mal :-°
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              2 novembre 2006 à 14:38:09

                              scanf("%s", &nomFichier);
                              // ...
                              scanf("%s",&contenu);

                              => C'est sans le & là ! (nomFichier et contenu sont des chaines de caractères...)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 novembre 2006 à 14:41:28

                                Non, ce n'est pas sa, sa créer juste le fichier mais rien dedans :(
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 novembre 2006 à 14:44:11

                                  Fais voir ton code actuel ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    2 novembre 2006 à 14:45:14

                                    char contenu[100];

                                    Et contenu, il contient quelque chose ? (pas dans ton code en tous cas)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 novembre 2006 à 14:45:51

                                      Voila :
                                      printf("\n");
                                                            printf("Quel nom voulez vous donner a votre fichier texte ?\n");
                                                            char nomFichier[TABLEAU];
                                                            scanf("%s", &nomFichier);
                                                            printf("\n");
                                                           
                                                            FILE* creerFichier = NULL;
                                                            creerFichier = fopen(nomFichier, "w");
                                                            char contenu[100];
                                                           
                                                            if (creerFichier != NULL)
                                                            {
                                                                        printf("Le contenu du fichier :\n");
                                                                       
                                                                        scanf("%c", contenu);
                                                                        fputs(contenu, nomFichier);
                                                                       
                                                                        fclose(nomFichier);   
                                                            }
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        2 novembre 2006 à 14:52:20

                                        Toujours le même problème, tu utilises la variable nomFichier là ou il faudrait utiliser la variable creerFichier... revoir le cours d'urgence pour éviter de programmer au pif =p
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          2 novembre 2006 à 14:56:51

                                          Citation : simon.arvaux

                                          Toujours le même problème, tu utilises la variable nomFichier là ou il faudrait utiliser la variable creerFichier... revoir le cours d'urgence pour éviter de programmer au pif =p


                                          Je ne vois pas où j'ai inverser :-°
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 novembre 2006 à 15:04:00

                                                                  if (creerFichier != NULL)
                                                                  {
                                                                              printf("Le contenu du fichier :\n");
                                                                              /* Si je comprend bien tu veux mettre un
                                                                                 caractère dans contenu[0] */

                                                                              scanf("%c", contenu);
                                                                              /* Là tu as inversé et tu veux mettre un caractère ou une chaine ?!? */
                                                                              fputs(contenu, nomFichier);
                                                                              /* Là tu as inversé */   
                                                                              fclose(nomFichier);   
                                                                  }
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              2 novembre 2006 à 15:12:36


                                              printf("Quel nom voulez vous donner a votre fichier texte ?\n");
                                              char nomFichier[256];
                                              scanf("%s",nomFichier);
                                              FILE* fichier=fopen(nomFichier,"w");
                                              char contenu[100];
                                              if(fichier){
                                                  printf("Le contenu du fichier :\n");
                                                  scanf("%s",contenu);
                                                  fputs(contenu,fichier);
                                                  fclose(fichier);   
                                              }
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                2 novembre 2006 à 15:13:07

                                                Citation : Bison

                                                "Ca ne marche pas" n'a jamais été une info exploitable.
                                                C'est un constat, tout au plus.

                                                Qu'est-ce qu'on peut faire sans ton (encore) nouveau code ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  2 novembre 2006 à 16:05:16

                                                  Bon, voila mon code actuel :
                                                  char NomFichier[TABLEAU];
                                                                        printf("Quel nom voulez vous donner a votre fichier texte ?\n");
                                                                        scanf("%s", &NomFichier);
                                                                       
                                                                        FILE* Fichier = NULL;
                                                                        Fichier = fopen(NomFichier, "w");
                                                                       
                                                                        if (Fichier != NULL)
                                                                        {
                                                                                    char contenuFichier[100];
                                                                                   
                                                                                    printf("\nLe contenu de votre fichier texte\n");
                                                                                   
                                                                                    scanf("%s", &contenuFichier);
                                                                                    fputc(contenuFichier, NomFichier);
                                                                                   
                                                                                    fclose(NomFichier);
                                                                        }

                                                  :)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    2 novembre 2006 à 16:43:38

                                                    2 erreurs sur la même ligne et une autre sur une seconde ligne.
                                                    Dans ton fputc, tu essayes de copier contenuFichier dans la chaine de caractère NomFichier. Tu ne voudrais pas plutôt la mettre dans le fichier non ?
                                                    Même erreur au niveau du fclose, ce n'est pas une chaine de caractère que tu fermes ...
                                                    Donc tu me remplaces à ces deux lignes NomFichier par Fichier !!!!

                                                    Ensuite, tu veux copier une chaine de caractère, fputc n'est pas fait pour copier une chiane, juste un seul caractère. Utilise fputs à la place (même prototype).
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      2 novembre 2006 à 16:51:01

                                                      Sa marche merci beaucoup à vous
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        2 novembre 2006 à 19:05:19

                                                        Et pourquoi les & sont encore là pour les scanf avec les chaines de caractères ?
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Ouverture d'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