Probéme de codage pour lire la taille de fichier texte

Probéme de codage pour lire la taille de fichier texte - C++ - Programmation

Marsh Posté le 25-01-2014 à 18:28:58    

Bonsoir a tous et a toutes,
 
Voila, comme le nom du topique l'indique j'ai un petit problème avec mon code source. Je voudrais lire un fichier txt et afficher a la fin sa taille.
Voici donc mon code:
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
 
   ifstream fichier("fichierscores.txt" );
   if(fichier)
   {
       string ligne;
       while(getline(fichier,ligne))
       {
           cout << ligne << endl;
       }
       fichier.seekg( 0 , ios::end);
       int position(0);
       position = fichier.tellg();
       cout << "Fichier de " << position << "octets" << endl;
   }
   else
   {
       cout << "Un probleme est survenu!!";
   }
    return 0;
}

 
Le soucis est que sa me marque : Fichier de -1 octes.
Par contre si je n'utilise pas la boucle et donc ne le lit pas, sa  marche.
Du coup pour faire ce que je voulais j'ai fait :
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
 
   ifstream fichier("fichierscores.txt" );
   if(fichier)
   
       string ligne;

      fichier.seekg( 0 , ios::end);
       int position(0);
       position = fichier.tellg();
       fichier.seekg(0, ios::beg);

      while(getline(fichier,ligne))
       {
           cout << ligne << endl;
       }
 
       cout << "Fichier de " << position << "octets" << endl;
   }
   else
   {
       cout << "Un probleme est survenu!!";
   }
    return 0;
}

Maintenant sa marche, mais je ne comprend toujours pas pourquoi le premier code etait faux.
Quelqu’un pourrait il m'eclairer?
Merci.
 
 
 
 

Reply

Marsh Posté le 25-01-2014 à 18:28:58   

Reply

Marsh Posté le 26-01-2014 à 10:48:42    

C'est parce que la fonction getline() génère une exception eofbit quand la fin de fichier est atteinte. Cette exception est de type ios_base::failure, dont l'implémentation dépend du système.

Reply

Marsh Posté le 26-01-2014 à 11:56:28    

ok, merci olivthill. J vais regarder de plus prés comment marche cette exception.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed