Lecture de la derniere ligne dans un fichier texte ouvert avec ifstream

indusine Messages postés 5 Date d'inscription dimanche 18 juillet 2004 Statut Membre Dernière intervention 20 août 2004 - 21 juil. 2004 à 13:38
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 22 juil. 2004 à 18:52
Bonjours à tous,je voudrais lire la derniere ligne d'un fichier texte ouvert en lecture avec ifstream.
Dans mon application(MFC AppWizard exe)Visual C++,j'ouvre ce fichier en ecriture avec ofstream dans d'autre
evenements.
Ce fichier comporte l'etat des boutons.
Mais je dois pouvoir ecrire dans le fichier texte hors de mon application et pouvoir interpreter son contenu
dans l'application.
Voici mon code et ce que j'ai obtenu avec est une chaine vide.


void CTtDlg::OnViewFile()
{
char ligne[30];

// ouverture en lecture.
// ios::app pointeur au debut du fichier
ifstream train("fic.txt",ios::app);

AfxMessageBox("ligne par ligne");

//Affichage du contenu du fichier ligne par ligne
while (train.getline (ligne,sizeof(ligne)));

AfxMessageBox(ligne);


//la derniere ligne affichée est une chaine vide je voudrai atteidre la ligne d'avant.

train.close(); // fermeture du fichier
}

j'ai essayé de faire un seek de la fin puisque je connais taille des chaines ecrites dans le fichier
//train.Seek(30,STREAM_SEEK_END,NULL);
mais je n'ai pas trouvé de méthode supporté par ifstream

Il existe une methode seekg(nbr octets) qui fait un saut du début le nbr octets étant
la taille du fichier-30
//train.seekg(taille-30);
mais je n'ai trouvé aucun moyen de calculer la taille avec ifstream

TRES IMPORTANT
je dois pouvoir conserver cette ligne dans une chaine de charactéres
//train.getline (ligne,sizeof(ligne));
avec getline je peux conserver la ligne lu dans la chaine ligne.
Merci d'avance.

3 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 juil. 2004 à 00:40
ou tu a vu que ios::app c'etait le debut du fichier ? c'est la fin et c'est pour ca que tu lis rien dans ton while

lis la doc...

#include 
#include <fstream>

int main()
{

    std::ifstream file("toto.txt");
    
    std::string str;
    while( std::getline( file, str ) );
    
    std::cout << str << '\n';
}
0
indusine Messages postés 5 Date d'inscription dimanche 18 juillet 2004 Statut Membre Dernière intervention 20 août 2004
22 juil. 2004 à 08:52
Effectivement je me suis gourrer. ios::app pointe à la fin du fichier.j'ai enlever ce ios::app.
je lis le contenu du fichier dans le while .mais apres j'ai besoin d'effectuer des opérations de comparaison sur la variable ligne mais je retrouve une variable qui contient une chaine vide.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 juil. 2004 à 18:52
pense à utiliser les nouveaux flux et essay d'orienter ton code plus c++, c'est à dire en utilisant le type string qui est la pour te faciliter la tache

tu peux essayer mon code tres simple et qui fonctionne

autre chose :
train.close(); // fermeture du fichier

c'est inutile, surtout avant la fin du bloc, le destructeur appel lui meme la methode close()
0
Rejoignez-nous