Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Ouvrir un fichier

Il veut pas s'ouvrir !

Sujet résolu
    12 avril 2006 à 8:31:50

    Salut ! Je cherche à ouvrir un fichier déjà crée !
    Mais ca ne marche pas !
    VOici le code , je rappelle que le fichier est dans le meme que l'exe
          fichier = fopen("t.txt","a+");
          if (fichier != NULL)
          {
              // On peut lire et écrire dans le fichier
              rewind(fichier);
          }
          else
          {
              // On affiche un message d'erreur si on veut
              printf("Impossible d'ouvrir le fichier\n");
          }
    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2006 à 8:58:17

      Citation : NarTy

      Salut ! Je cherche à ouvrir un fichier déjà crée !
      Mais ca ne marche pas !
      VOici le code , je rappelle que le fichier est dans le meme [répertoire -ed-] que l'exe


      Le code est incomplet. Il doit y avoir un problème ailleurs. Je n'ai pas de problèmes avec ceci :

      /* main.c */
      #include <stdio.h>

      int main(void)
      {
         FILE *fichier = fopen("t.txt", "a+");
         if (fichier != NULL)
         {
            char s[128];
            fgets(s, sizeof s, fichier);
            printf ("%s", s);
            fflush (stdout);

            // On peut lire et écrire dans le fichier
            rewind(fichier);
            fclose (fichier), fichier = NULL;
         }
         else
         {
            // On affiche un message d'erreur si on veut
            printf("Impossible d'ouvrir le fichier\n");
         }
         return 0;
      }

      et 't.txt'

      hello world


      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        12 avril 2006 à 13:22:22

        Pourquoi il serait incomplet ?
        Et non je ne pense pas que le probleme vienne d'allieurs car quand je mets ce code en commentaire , aucun probleme !
        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2006 à 13:48:42

          Pourquoi "a+" si c'est pour lire à partir du début ? "r" est fait pour ça... (avec le rewind après c'est pas malin)
          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2006 à 14:23:21

            Citation : NarTy

            Pourquoi il serait incomplet ?
            Ne compile pas... J'ai du inventer le code manquant. Je ne sais pas ce que tu as oublié...


            Compiling: main.c
            main.c:2: warning: type defaults to `int' in declaration of `fichier'
            main.c:2: error: implicit declaration of function `fopen'
            main.c:2: error: initializer element is not constant
            main.c:2: warning: data definition has no type or storage class
            main.c:3: error: syntax error before "if"
            main.c:12:8: warning: no newline at end of file
            Process terminated with status 1 (0 minutes, 0 seconds)
            3 errors, 3 warnings


            Et non je ne pense pas que le probleme vienne d'allieurs car quand je mets ce code en commentaire , aucun probleme !


            Et ça prouve quoi ? Si 'ficher' n'a pas la bonne valeur, t'es mal. Poste ton code complet mais réduit au minimum qui montre le problème.
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              12 avril 2006 à 15:20:48

              ok , en fait c'est une fonction : qui ouvre le fichier !
              void FICHIER_ouvrirFichier(FILE *fichier, int  choix, char* nom)
              {
                 if(choix == 1)
                 {
                    fichier = fopen(nom,"a+");
                    if (fichier != NULL)
                    {
                        // On peut lire et écrire dans le fichier
                        rewind(fichier);
                        fclose(fichier);
                    }
                    else
                    {
                        // On affiche un message d'erreur si on veut
                        printf("Impossible d'ouvrir le fichier\n");
                    }

                 }
                 else if(choix == 2)
                 {
                    fichier = fopen(nom,"w+");
                 }
                 else
                 {
                    exit(1);
                 }
              }
              • Partager sur Facebook
              • Partager sur Twitter
                12 avril 2006 à 16:04:28

                Citation : NarTy

                ok , en fait c'est une fonction : qui ouvre le fichier !

                void FICHIER_ouvrirFichier(FILE *fichier, int  choix, char* nom)
                {
                      fichier = fopen(nom,"a+");

                A quoi sert le paramètre fichier si tu l'écrabouilles d'entrée ?

                Un peu de lecture (c'est très frais...)

                http://www.developpez.net/forums/viewtopic.php?t=486651
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  12 avril 2006 à 18:21:26

                  Beh , je l'ecrabouille ?Je l'ecrabouille pas parce que je fais rien avant !
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 avril 2006 à 18:48:19

                    En fait c'est un peu le bordel ton code ^^

                    Tu "écrabouilles" le paramètre fichier car il est local à la fonction : tu modifies la valeur du pointeur (avec le fopen), donc sortie de la fonction, il a toujours sa valeur d'avant. Il faudrait mieux retourner un FILE depuis ta fonction. Sinon, si le paramètre est écrasé dès le début de sa fonction, c'est qu'il est inutile (peu importe sa valeur, elle change en une autre).

                    Le choix 2 n'a pas droit à une vérification de la validité du pointeur ?

                    Pourquoi faire un exit dans le else ? Si on passe un mauvais choix, pas la peine de quitter tout le programme. D'ailleurs, il serait plus simple de donner directement en argument le mode d'ouverture.

                    Voici comment j'aurais refait tout ça (j'ai pas testé :D ) :
                    FILE *
                    my_fopen(const char *name, const char *mode)
                    {
                            FILE *f;
                            if(!(f = fopen(name, mode))) {
                                    printf("Error.\n");
                                    return (NULL);
                            }
                            return (f);
                    }

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 avril 2006 à 20:09:34

                      AH !! Je comprends !! Merci louisclem @+
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 avril 2006 à 20:41:48

                        Toujours la même question, pourquoi utiliser "a+" et pas "r+", qui t'éviterai un rewind() ?
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [C] 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