Moi du std::string avec du MFC ca me choque pas.
Pour avoir une partie m�tier portable comme le dit Dark-Water, ca � son avantage. A moins d'utiliser des char *, mais ce n'est ni sur ni pratique
Version imprimable
Moi du std::string avec du MFC ca me choque pas.
Pour avoir une partie m�tier portable comme le dit Dark-Water, ca � son avantage. A moins d'utiliser des char *, mais ce n'est ni sur ni pratique
ouep j'ai rectifi� mais ca change rien :triste: et avec path ca change rien non plusCitation:
Envoy� par rigobert
Ps petite rectif sur le code j'avais retir� des commentaires qui fallait pas
Sinon il y a aussi un cast implicite qui me parait un peu douteux dans ton code :
si � la place tu fais :Code:string path = FileOpenDialog.GetPathName();
Ca donne quoi ?Code:
1
2 CString s = FileOpenDialog.GetPathName(); std::string path ((LPCTSTR) s);
rien de nouveau toujours le meme plantage
8O donc tu dis que :
ne marche pas (f invalide) ??Code:
1
2
3 CString s = FileOpenDialog.GetPathName(); std::string path ((LPCTSTR) s); std::ifstream f (path.c_str());
non non ca change rien par rapport a ce que j'avais avantCitation:
Envoy� par rigobert
ps g pas mis le f car j'ai besoin d'un string
Dans mon exemple f est un flux, pas une chaine ?!Citation:
Envoy� par Dark-Water
Es-tu s�r d'avoir bien compris ce que sont et � quoi servent les objets standards que tu utilises (string, ifstream, CString ...) :aie: ?
Parce que l� j'ai comme un s�rieux doute...
non ce que je veux dire je l'ai pas mis car il ne me sert a rien
tu ne r�ponds pas � ma question ;)
- ton code (ou ce que tu en as post�) est embrouill� ;
- les r�ponses que tu fais paraissent embrouill�es ;
j'en d�duis donc que tu as toi-m�me une vision un peu embrouill�e du programme que tu es entrain de faire.
est-ce que je me trompe ?
mon programme est embouill� moi un peu moins ;) et j'ai compris ce que veux faire mais ca change rien.
Je presice que j'ai rectif� le code fourni y'avait des trucs qui servait � rien
mouais.
le dernier bout de code que j'ai post� n'�tait pas un code "fourni" � ins�rer dans le tien, mais une illustration de mon propos.
dans ton code tu peux aussi commenter �a :
et passer directement path � la fonction Importer()Code:
1
2
3 string spath; spath = path.substr(0,path.find('\n')); istringstream iss( spath );
Exact c rectifi�
Ce que tu me disais de faire avec f est fait dans la fonction importer
donc maintenant file dans Importer() est forc�ment bon, non ?
Pour en revenir � l'histoire de l'antislash, si on veut mettre un \ dans une cha�ne, il faut toujours en mettre deux � la suite, car un antislash indique au compilateur l'insertion d'un caract�re sp�cial (enfin, pas seulement). J�te un coup d'oeil ici : http://www.ann.jussieu.fr/courscpp/S...Sect02-B0.html
Donc, si tu as une cha�ne C:\bidule\fichier.txt, elle sera interpret�e comme ceci avec le compilo : C: + caract�re ASCII 8 + idule + caract�re ASCII 12 + ichier.txt.
Et un c:\toto.txt sera interpret� comme ceci : c: + caract�re ASCII 9 + oto.txt.
EDIT:
Je rajoute un exemple. Dans ton code, tu as (par exemple) un while ( getline ( iss, mot, '\' ) ). Mais par cons�quent, le compilo l'interpr�tera donc de cette fa�on : while ( getline ( iss, mot, '' ) ). Forc�ment, �a change tout. \', en C++, correspond au caract�re ASCII '.
EDIT 2:
Petite pr�cision. De plus, dans le dernier exemple, le caract�re \' ne sera pas interpret� en tant que apostrophe en tant que tel (qui permet, en C++, de remplacer un caract�re ASCII), mais il sera interpret� en tant que caract�re ASCII aspostrophe. Et l�, �a change tout, car le compilateur attendra le ' final. Donc, le compilo renverra une erreur de syntaxe.
Dans le m�me principe, si on veut une cha�ne bidule "truc", il faudra ABSOLUMENT pr�c�der le " par un \ pour que le compilo n'interprete pas ce caract�re, mais qu'il le consid�re comme un simple caract�re ASCII. Car sinon le guillemet sera interpret� comme "d�limiteur" (je ne sais pas si ce mot convient) de cha�ne, comme dans une instruction du style : char chaine[]="toto";. Tu vois � peu pr�s ce que je veux dire ?
Juste pour un essai suppl�mentaire, tu pourrais
remplacer les '\' (simple) par des '/'
sinon la fonction d'origine o� il y a val = val + "\\" + mot
il faudrait au moins val = val + "\\\\" + mot
si la fonction s'appelle effectivement "doublerQuote"
Non j'ai rien dans fileCitation:
Envoy� par rigobert
c'est le std::ifstream file (path.c_str()); qui merde
en effet while ( getline ( iss, mot, '\' ) ) marche pas mais avec while ( getline ( iss, mot, '\\' ) ) c'est OK de meme qu'il faut val = val + "\\\\" + motCitation:
Envoy� par Hylvenir
Le probleme de \\ est r�solu n�amoins ca a pas regler mon probl�me de fichier comme je l'avait esp�rer :triste:
je n'ai aucun flux dans file
Donc pour r�sumer,
une chaine hard-coded ca marche
une chaine resultat d'un dialog box, ca marche pas
Donc c'est sur les deux cha�nes non pas la m�me valeur. Sinon ...8O
Essaye de comparer les deux string (std::string::compare() je croit), si ca te retourne 0 alors c'est qu'il doit y avoir un trou dans le continum espace temps chez toi
Ca on l'avait dis...Citation:
Envoy� par Dark-Water
Tu pourrais pas afficher le retour de FileOpenDialog.GetPathName() dans une bo�te de dialogue pour voir ce que tu obtiens ?
Citation:
Envoy� par Eusebe
j'ai bien le chemin d'acc�s je l'ai verifier au debugger