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
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 et avec path ca change rien non plusEnvoyé par rigobert
Ps petite rectif sur le code j'avais retiré des commentaires qui fallait pas
est mon ami !!!
Sinon il y a aussi un cast implicite qui me parait un peu douteux dans ton code :
si à la place tu fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part string path = FileOpenDialog.GetPathName();
Ca donne quoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CString s = FileOpenDialog.GetPathName(); std::string path ((LPCTSTR) s);
"La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."
G. CLEMENCEAU
rien de nouveau toujours le meme plantage
est mon ami !!!
donc tu dis que :
ne marche pas (f invalide) ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CString s = FileOpenDialog.GetPathName(); std::string path ((LPCTSTR) s); std::ifstream f (path.c_str());
"La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."
G. CLEMENCEAU
non non ca change rien par rapport a ce que j'avais avantEnvoyé par rigobert
ps g pas mis le f car j'ai besoin d'un string
est mon ami !!!
Dans mon exemple f est un flux, pas une chaine ?!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 ...) ?
Parce que là j'ai comme un sérieux doute...
"La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."
G. CLEMENCEAU
non ce que je veux dire je l'ai pas mis car il ne me sert a rien
est mon ami !!!
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 ?
"La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."
G. CLEMENCEAU
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
est mon ami !!!
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 string spath; spath = path.substr(0,path.find('\n')); istringstream iss( spath );
"La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."
G. CLEMENCEAU
Exact c rectifié
Ce que tu me disais de faire avec f est fait dans la fonction importer
est mon ami !!!
donc maintenant file dans Importer() est forcément bon, non ?
"La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."
G. CLEMENCEAU
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 fileEnvoyé par rigobert
c'est le std::ifstream file (path.c_str()); qui merde
est mon ami !!!
en effet while ( getline ( iss, mot, '\' ) ) marche pas mais avec while ( getline ( iss, mot, '\\' ) ) c'est OK de meme qu'il faut val = val + "\\\\" + motEnvoyé 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
je n'ai aucun flux dans file
est mon ami !!!
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 ...
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...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 ?
Envoyé par Eusebe
j'ai bien le chemin d'accès je l'ai verifier au debugger
est mon ami !!!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager