Problème de réouverture de fichier texte [Résolu]

Signaler
Messages postés
2
Date d'inscription
mardi 19 juillet 2005
Statut
Membre
Dernière intervention
20 juillet 2005
-
Messages postés
2
Date d'inscription
mardi 19 juillet 2005
Statut
Membre
Dernière intervention
20 juillet 2005
-
Bonjour,

Voici mon problème : J'arrive à ouvrir et afficher le contenu d'un
fichier texte, mais sa réouverture ne se passe pas correctement.

D'où vient le problème ? Comment le corriger ?



Voici le code source :

#include <cstdlib>

#include

#include <fstream>



using namespace std;



int main(int argc, char *argv[])

{

string NomFichier("");

cout << "Entrez le nom du fichier : ";

cin >> NomFichier;



ifstream f(NomFichier.c_str());

if(f) //existe déjà?

{

cout << "*** Contenu actuel du fichier : ***\n";

char ch;

while(f.get(ch))

cout << ch;

cout << "*** Fin du fichier " << NomFichier << ". ***\n";

}



f.close();



f.open(NomFichier.c_str());

if(!f.good())

{

cout << "Ouverture impossible de " << NomFichier

<< " en lecture.\n";

system("PAUSE");

return(1);

}

else

{

cout << "\nContenu du fichier :\n";

char ch;

while(f.get(ch))

cout << ch;

cout << "*** Fin du fichier " << NomFichier << ". ****\n";

f.close();

}



system("PAUSE");

return EXIT_SUCCESS;

}




Et voici la sortie du programme :

Entrez le nom du fichier : fText.txt

*** Contenu actuel du fichier : ***

1ere ligne,

2nd ligne.

*** Fin du fichier fText.txt. ***

Ouverture impossible de fText.txt en lecture.

Appuyez sur une touche pour continuer...




Je pense que le problème vient de la ligne

f.open(NomFichier.c_str());

mais je ne le vois pas.

3 réponses

Messages postés
17
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
21 juillet 2005

ajoute



f.clear(); // le statut de f doit être <tt>eofbit car tu as atteint la fin du fichier</tt>



apres f.close() :




void clear ( iostate state = goodbit );



Set control states.


Sets a new value for the control state ignoring the existing value.






Parameters.


* state :
An object of type <tt>ios_base::iostate</tt>
that can take as value any combination of the following state flag member
constants:

<li><tt>badbit </tt> (critical error in stream buffer)
</li><li><tt>eofbit </tt> (End-Of-File reached while extracting)
</li><li><tt>failbit</tt> (failure extracting from stream)
</li><li><tt>goodbit</tt> (no error condition, represents the absence of the above bits)
</li>

These are static member constants inherited from <tt>ios_base</tt>.
You may combine more than one state flag bitmask using the bitwise <tt>|</tt> (or) operator.

If this parameter is not specified, <tt>goodbit</tt> is assumed so any error state
is cleared.




Return Value.


none
Messages postés
17
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
21 juillet 2005

et plutot que :



if(f)



utilise



if (f.good())



ou



if (f.fail())



perso je trouve ca plus approprié et plus clair
Messages postés
2
Date d'inscription
mardi 19 juillet 2005
Statut
Membre
Dernière intervention
20 juillet 2005

Merci, ça marche impec'.