Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fichiers

Sujet résolu
Anonyme
    17 février 2006 à 13:16:23

    Bonjour,

    Excusez-moi de vous déranger encore (ça fait beaucoup aujourd'hui :honte: ).

    L'ouverture du fichier, dirait-on, pose un problème avec le code suivant :

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
      FILE* fichier = NULL;
      fichier = fopen("test.txt","r+");
      if (fichier!=NULL)
      {
          printf("Ca marche !\n");
          fclose(fichier);
      }
      else
      {
           printf("Ca ne marche pas...\n");
      }
      system("PAUSE");     
      return 0;
    }


    Car la console affiche :
    Ca ne marche pas...
    Appuyez sur un touche pour continuer...


    Alors que j'ai bien un fichier test.txt dans le même dossier que mon exécutable.


    Où est le problème ?

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      17 février 2006 à 13:18:45

      T'as créé un fichier "test.txt" avant de compiler ? :p
      ça ne crée pas le fichier ça l'ouvre ... enfin il me semble :euh:
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        17 février 2006 à 13:20:18

        Oui j'ai créé le fichier test.txt avant de compiler, dans le même dossier !
        • Partager sur Facebook
        • Partager sur Twitter
          17 février 2006 à 13:22:22

          Il me semble que si le fichier n'existe pas, il le créé tout seul
          • Partager sur Facebook
          • Partager sur Twitter
            17 février 2006 à 13:31:32

            Non, en tout cas pas avec fopen, il tente simplement de l'ouvrir.

            Euh sinon pour ton problème désolé je vois pas, t'es sûr que tu l'as appelé "test.txt" (une erreur toute simple de ce genre peut tout à fait arriver^^)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              17 février 2006 à 13:38:30

              Ah ! J'ai localisé la faille :p

              J'ai changé "r+" en "w", et ça a marché ! Et puis j'ai encore changé le "w" en "r+" et ça a aussi marché o_O

              Je suppose qu'on ne peut pas LIRE un fichier auquel on a pas encore accédé par un "w" (écriture)... :o

              Désolé de vous avoir encore dérangé :-°
              • Partager sur Facebook
              • Partager sur Twitter
                17 février 2006 à 13:40:18

                Je confirme, il créé le fichier tout seul ! j'ai tester en ouvrant un fichier qui n'existait pas, il me la créé !
                Voici mon code
                #include <stdio.h>
                #include <stdlib.h>

                int main()
                {
                    FILE *fichier = NULL;
                    fichier = fopen("truc.txt", "w+");

                    if(fichier != NULL)
                    {
                        printf("Sa a marcher !!\n");
                        fprintf(fichier, "Wazaaaaa");
                        fclose(fichier);
                        system("start notepad \"truc.txt\"");
                    }
                    else
                    printf("Pas marcher...");

                    getch();
                }

                Le system(), c'était pour le test hein ^^, je ne l'utilise jamais sinon...

                EDIT : Je vien de voir que r+ ne créé pas le fichier :D
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  17 février 2006 à 13:45:58

                  Ok... donc si j'ai bien compris on peut créer ou accéder pour la première fois à un fichier par "w" ou "w+", mais pas par "r" ou "r+"...


                  EDIT : il y avait peut-être une autre source d'erreur : j'ai appelé mon fichier test.txt ; je crois bien qu'il fallait l'appeler test. A vérifier...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 février 2006 à 13:56:51

                    Je sais pas, mais ce que je sais c'est que moi j'y ai accédé dès la première fois avec "r+", donc c'est pas ça l'erreur. :p
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 février 2006 à 14:13:38

                      Il faut que l'extention du fichier soit .txt, pas le nom du fichier, attention !!!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 février 2006 à 14:15:25

                        Salut j'ai eu un problème similaire au tient, je vous l'expose ;)

                        #include <stdio.h>
                        #include <stdlib.h>
                        #define TAILLE_MAX 250

                        int main(int argc, char *argv[])
                        {
                          char Txt[TAILLE_MAX];
                          FILE *mPointeur = NULL;
                          mPointeur = fopen("dossier/Test.txt", "r");
                          if (mPointeur != NULL)
                          {
                                        fgets(Txt, TAILLE_MAX, mPointeur);
                                        fclose(mPointeur);
                                        rename("dossier/Test.txt","dossier/Test.bat");
                                        printf("Le fichier contient:\n %s", Txt);
                                        }
                                        else { printf("Erreur"); }
                          getch();
                          return 0;
                        }

                        Ce code va me montrer le contenu du fichier mais pas me le renommer...
                        Remplacer par ca:
                        mPointeur = fopen("dossier/Test.txt", "r+");

                        Ce code ne va pas me montrer le contenu mais me simplement me le renommer =D

                        Je suis entrain de tous les faire pour voir lequel pourrai faire les 2 ^^

                        EDIT: faute de ma part, il falait juste inverser:
                           
                        printf("Le fichier contient:\n %s", Txt);
                        rename("dossier/Test.txt","dossier/Test.bat");

                        Bienque que je croyais que c'était indépendant.
                        Désolé du dérangement :p
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 février 2006 à 14:15:47

                          Non t'es pas obligé de l'ouvrir en w+ (écriture) pour pouvoir ensuite lire.
                          C'est tout simplement soit que le nom de fichier était pas bon (probable), soit que le fichier n'était pas dans le même dossier, soit que le fichier était ouvert en fond déjà (avec bloc-notes).

                          Réessaie en supprimant le .txt situé dans le dossier de l'exe et en le recréant.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                            17 février 2006 à 14:20:38

                            À mon avis, le fichier que tu as créé ne s'appelait pas fichier.txt. Par exemple, t'as peut-être désactivé les extensions de fichier (Outils > Options des dossiers > Affichage > Masquer les extensions des fichiers dont le type est connu), et t'as donc créé un fichier test.txt.txt.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              17 février 2006 à 19:02:50

                              Oui voilà, je l'avais tout bêtement appelé test.txt.txt en fait :-°


                              Allez, une dernière question et après je vous laisse tranquilles :p

                              J'ai écrit le code suivant :
                              // je vous passe les détails

                              fichier = fopen("test.txt","r+");
                               
                                if (fichier!=NULL)
                                {
                                    fprintf(fichier,"Salut ! Comment ca va ?");
                                    fgets(chaine,TAILLE_CHAINE,fichier);
                                    printf("%s",chaine);
                                    fclose(fichier);
                                }

                              // je vous passe aussi les détails


                              Eh bien... ça ne marche pas. D'après mes tests, c'est le fait d'avoir le fgets (ou est-ce le printf ?) juste après le fprintf qui pose problème. En effet, si je supprime l'une des deux lignes, l'autre fonctionne parfaitement. Et si je conserve les deux, seule la première est lue :euh:

                              Pourtant je suis en r+ qui devrait me permettre de lire ET d'écrire...

                              Quelle est la solution ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                17 février 2006 à 19:59:24

                                Bonsoir,

                                Je pense que le curseur est mal positionné (enfin si tu veux lire la chaîne que tu viens d'écrire.
                                Essaie avec rewind(fichier); après le fprintf();

                                Duarna
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 février 2006 à 20:05:03

                                  essaie en mettant un fputs au lieu du fprintf.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    17 février 2006 à 21:19:46

                                    Tu as raison Duarna, j'avais oublié le rewind(fichier);

                                    Merci !
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Fichiers

                                    × 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