Ofstream & ifstream [Résolu]

Signaler
Messages postés
45
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
30 novembre 2005
-
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
-
Boonjour;

J'ai une question toute simple savais pkoi cette syntax n'est pas accepté :

ofstream filesoft( lpe.lpe["fichier"]);

Merci d'avance.

en faite le but est de récuperer me nom du fichier à l'aide d'un fichier de config pour cela g fais un traitement avec une map ect...

13 réponses

Messages postés
45
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
30 novembre 2005

Non c'est bon j'ai vu ou cela cloché en faite il suffit d'utiliser la syntaxe suivante :

ofstream fileerr( lep.lpe["fichier"].c_str());

voilà cela fonctione très bien
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Bah, écoute, si tu ne nous pas plus d'indications sue ce qu'est "lpe", tu n'auras pas beaucoup de réponses...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
45
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
30 novembre 2005

Alors en faite cela correcpond à lpe::lpe["fichier"]
c'est l'appel de la map lpe dans la class lpe tout simplement et dans cette map il y a tout le stockage des valeurs contenu dasn un fichier .txt que j'ai parsé voilà
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Mouais, pas clair,...
Il faut savoir que le constructeur de (i/o)fstream prend en paramètre:
- const char * name --> nom du flux à ouvrir (fichier.txt)
- int mode --> ios::out pour ouvrir un flux en écriture (par défaut: ios::out)
- int protection --> protection du fichier (par défaut: filebuf::openprot)

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
45
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
30 novembre 2005

Bon pou avoir plus de compréhension je vais reprendre du début.
Alors j'ai créé une class contenant une map qui me permet de stocker des valeurs lu d'un fichier config.txt.
Ainsi chaque valeurs de se fichier peut etre réutiliser dans l'importe quel partie du programme en vesant simplement un appel avec la map.

Ex :

ple.ple['fichier"] va renvoyé fichier.txt ce qui est contenu dans le fichier config.txt.

Ce qui veux dire que je n'écrirais plusen dur le nom du fichier à ouvrir maios cela se fais par l'intermediare d'un fichier de config.

Jusque la tout va bien cela fonctionne correctement. Le probleme c'est quand je désire utiliser cette syntaxte de le ofstream.

ex :

ofstream fileerr( "Error.log" ); //ouverture du fichier error.log

je veux le faire comme ca mainteannt en utilisant ma map avec mon fichier config.txt
lep.lep["fichier"]; => error.log
ofstream fileerr( lep.lpe["fichier"]); //ouverture du fichier qu'il s'appelle error.log

voilà je pense que la sa doit etre claire.
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
OK, je comprends un petit peu mieux. Etant donné que je ne connais pas la classe map par coeur, je vais sur MSDN. Là, j'apprends:
- l'opérateur [] permet d'ajouter une valeur avec un clé spécifiée
- iterator find(const Key& _Key) permet de récupérer un itérateur pointant sur la clé spécifiée
- l'exemple me montre comment rechercher une valeur associée à une clé

Du coup, teste ceci (ou un truc du genre):
std::map<?,?>::iterator _It = lpe.find("fichier.txt");
ofsteam OutFile(_It->second);

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
45
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
30 novembre 2005

Oui je sais je déjà essayé cela et sa fonctionne mais c'est des que je désire l'incruster dans les () de ostream que cela ne marche pas il me marque :

error: no matching function for call to :
std::basic_ofstream<char, std::char_traits<<char> >::basic_ofstream(
std::basic_string<char, strd::char_traits<char>, std::allocator<char> >&)
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Et bin alors, t'embêtes pas si cela marche comme cela...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
45
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
30 novembre 2005

oui mais ca arche en dehord du ofstream mais moi je veux le mettre dedant ... c'est cela la base de mon probleme. ??
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
What a strange problem!

Tu as bien inclus iostream: #include et non pas ?
Ta map est bien déclarée comme ceci: map< char *, char *> ?
Tu fais bien un truc du genre:
ofstream OutFile(lpe.find("fichier.txt")->second);

Désolé de te demander cela mais ce sont des erreurs toutes bêtes que tu mets longtemps à trouver...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Effectivement, si tu ne me dis pas que tu travaille avec des CString...

Bon continuation

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
66
Date d'inscription
jeudi 6 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2006

rectification pour buno

.c_str() => ne rerenvoie pas une CString mais bien un char* en fait
je t'explique lorsque'il faisait ceci : lep.lpe["fichier"] il recupere
un pointeur sur sa map et non sur sa chaine de caractere puis il lui
applique la fonction c_str() afin d'en recuperer la chaine de caractere
de cet element de la map.
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Merci, j'avais compris :P
Ce que je voulais dire, c'est que s'il m'avait dit, dès le départ, qu'il manipulait une map de CString, le post n'aurait pas été aussi long :)

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...