Partage
  • Partager sur Facebook
  • Partager sur Twitter

re probleme de fichier

vraiment désolé

Sujet résolu
    13 juillet 2007 à 18:14:00

    j'ai trouver mon probleme de lecture... je n'arrive pas à deplacer le curseur dans le fichier une fois EOF atteint

    voici le code "test"
    #include <iostream> //cout
    #include <fstream>//ifstream
    using namespace std;



    int main(int argc, char *argv[])
    {ifstream fichier("truc.txt",ios::in);//j'ouvre un fichier truc.txt

    if(fichier)//si le fichier est ouvert
    {string ligne;
    //j'affiche la position du curseur
    cout<<fichier.tellg()<<"*"<<endl;//normalement affiche 0*
     while(getline(fichier, ligne))
    {cout<<fichier.tellg()<<endl;}//on regarde la position dans le fichier
    //tout le fichier a été lu.
    cout<<fichier.tellg()<<"*"<<endl;//doit afficher -1*à l'écran
    fichier.seekg(0);//on positionnele curseur au debut du fichier
    cout<<"*"<<fichier.tellg()<<"*"<<endl;//doit renvoyer *0*
    fichier.close();//on ferme le fichier
    }
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    voici l'affichage (ne tenir compte que des valeurs avec *

    0*
    46
    81
    99
    103
    106
    107
    -1*
    *-1*
    appuyer sur une touche...


    mais ce code peut marcher si le curseur n'atteint pas EOF
    o_O la je suis depassé mais vraiment depassé quandon arrive à la fin d'un fichier on ne peut plus déplacer le curseur???


    encore une autre chose

    #include <iostream>//cout
    #include <fstream>//ifstream
    using namespace std;



    int main(int argc, char *argv[])
    {ifstream fichier;
    fichier.open("truc.txt",ios::in);//on ouvre le fichier en mode ecriture

    if(fichier)//si le fichier existe
    {string ligne;
    while(getline(fichier,ligne))
    {;}//on va juste à la fin du fichier (EOF)
    fichier.close();//on le ferme
    fichier.open("truc.txt",ios::in);//on le re-ouvre
    cout<<fichier.tellg()<<endl;//doit renvoyer 0 et non -1
    fichier.close();}
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    et devinez ce que ca me renvoie??? :(

    -1
    appuyer sur une touche...


    mais m'affiche 0 si je n'ai pas atteid la fin du fichier
    Pourquois ce probleme avec la fin du fichier???


    cette fois ci c'est serieux ce n'ai pas à cause d'un return; mal placé.
    et cela m'empeche de continuer mon projet...

    je voudrais savoir si cela vous arrive avec mon code ou si c'est mon IDE. ^^

    merci pour vos réponses ;)
    • Partager sur Facebook
    • Partager sur Twitter
      13 juillet 2007 à 18:18:01

      parce que eof est une mauvaise lecture... fait un ignore() de ton stream et un clear()

      voir la FAQ developpez dans la section des fichiers (lien dans ma signature)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        13 juillet 2007 à 18:26:35

        Salut,

        pour le premier code, tu as oublier #include <string>, et rajoute fichier.clear() avant le fichier.seekg(0) et ton problème sera résolut.

        pour le deuxième code, idem

        Xav57

        PS : je crois que je vais rajouter ça dans mon tuto ;)
        • Partager sur Facebook
        • Partager sur Twitter
          13 juillet 2007 à 18:37:38

          "oups pour <string> ^^ "

          je vais tester clear()
          mais techniquement parlant à quois sert cette fonction clear()???? ;)

          j'ai tester le code et ca marche :D
          merci pour tout ^^
          • Partager sur Facebook
          • Partager sur Twitter
            13 juillet 2007 à 23:24:34

            Hum ...
            -> http://www.siteduzero.com/forum-83-164984-1511407.html#r1511407
            -> http://www.siteduzero.com/forum-83-164984-1512297.html#r1512297

            PS: ici le ignore n'apporte rien. L'exemple de la FAQ qui fait ignore + clear, c'est pour repartir après n'avoir pas pû décoder des entiers dans le flux. Sur une fin de flux, il faut le réouvrir quand on peut (cas p.ex. des fichiers). Dans l'exemple de la FAQ, toujours quand std::cin est fermé, plus rien ne pourra jamais être lu et on sort définitivement de la boucle.
            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

            re probleme de 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