fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008
-
19 oct. 2007 à 12:06
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 2011
-
22 oct. 2007 à 10:25
Salut a vous!!
Je vous sollicite car j'ai un probleme : je dev en C sous Embedded Visual C++ (windows CE)
J'ai un exe Projet_Falcon.exe, qui s'appuie sur des données presentes dans un Projet_Falcon.ini
mon souci, c'est que je veux qu'il lise bien le ini, et ce sans donner un chemin en dur.
Donc j'ai utilisé GetModuleFileName ainsi :
TCHAR chemin[100];
GetModuleFileName(0,chemin,MAX_PATH);
Cela me renvoit : \Storage Card\Projet_Falcon.exe
Le souci c'est que ensuite, je veux lire le fichier present donc à l'emplacement \Storage Card\Projet_Falcon.ini
Or, le probleme c'est qu'il n'y arrive pas, puisque les "" doivent être doublés!
Et j'en arrive a mon probleme : pour remplacer tout les "" par des "\", le compilateur me balance : error C2001: newline in constant
(exemple : if(chemin[i]!=="") =>error C2001: newline in constant
Si quelqu'un a une idée, ou croit que j'ecris des enormités, faites moi signe SVP, je vois pas trop là comment contourner le probleme
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 19 oct. 2007 à 14:03
Merci darunia pour la réponse
Pour le !== excuse, cest une faute de frappe pour l'exemple, evidemment que cela ne passe pas.
Sinon tester avec '\', j'avais également essayer, mais il n'aime pas mieux : if(chemin[i]=='\') => error C2001: newline in constant
Enfin, ton strcpy ne fonctionne pas mieux, puisque le resultat de
strcpy(strstr(chemin, ".") + 1, "ini)
donne "ini" tout simplement (strstr donne ce qui se trouve apres le ".".
Moi j'ai fais
char* cheminFichier = strtok(chemin,".");
cheminIni=strcat(cheminFichier,".ini");
et ca donne bien \Storage Card\Projet_Falcon.ini, mais moi je veux \\Storage Card\\Projet_Falcon.ini !!
Car apres sinon il ne peux ouvrir le fichier à l'emplacement, si les '\' ne sont pas doublés
Si quelqu'un voit comment faire, help!
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 20112 19 oct. 2007 à 14:11
Il ne faut pas regarder ce que renvoi strcpy, mais le contenu de la variable chemin apres le strcpy !
Pour le '\' autant pour moi, il faut le doubler : '\\'
En ce qui concerne les \, il doivent etre doublés si tu le met en constante dans ton source.
Si en execution, un affichage de chemin affiche
\Storage Card\Projet_Falcon.ini alors c'est correct, je ne vois pas ou est le probleme
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 19 oct. 2007 à 14:25
Re Darunia,
Je n'arrive pas à declarer le '\'
J'ai essayé de passer par "define", par "const char", rien n'y fait il me mets newline in constant!!
Pour le chemin \Storage Card\Projet_Falcon.ini, je suis d'accord avec toi, il est correct, cependant par la suite dans le code je fais un
FILE *file=_tfopen(chemin, TEXT("wt"));
et là ce chemin doit avoir les '\' doublées.
J'ai pas les yeux en face des trous ou quoi lol
Au pire aurait tu un exemple , pour définir le '\' et le remplacer par '\\' à chaque fois qu'on le rencontre dans une chaine?
Merci !
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 19 oct. 2007 à 14:58
Merci pour vos reponses,
En effet je dois sans doute confondre certains choses...
Car maintenant j'arrive bien à créer ma chaine \\Storage Card\\Projet_Falcon.ini,
Mais il ne veut plus ouvrir le fichier
avant je mettais en dur :
char* cheminIni="\\Storage Card\\Projet_Falcon.ini";
et ensuite je faisais FILE* file = _tfopen(ConvertAnsiToUnicode(cheminIni),TEXT("rb")); // ouverture du fichier en binaire
et maintenant, bien que je recréé bien \\Storage Card\\Projet_Falcon.ini dans le char* cheminIni, il pase en erreur a chaque fois
Je suis pommé là
( ton code SAKingdom me renvoi le chaine "i" seulement )
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 19 oct. 2007 à 15:17
"Tu n'as pas besoin de double ces satanés \ ...."
A non ?
[auteur/FREDSOR/755859.aspx fredsor] >> Je ne crois pas que tu devrais programmer en UNICODE pout l'instant. Tu n'as pas l'air de bien maitriser certains concepts et ça pourrait causer beaucoup de problèmes (comme en ce moment même).
Pour maintenant, vaut mieux rester en ansi. Bien plus simple.
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 19 oct. 2007 à 15:44
Non Darunia
Je m'explique plus clairement :
si je fais
char* cheminIni="\\Storage Card\\Projet_Falcon.ini";
void LireFichierIni()
{
FILE* file = _tfopen(ConvertAnsiToUnicode(cheminIni),TEXT("rb")); // ouverture du fichier en binaire
if(file!=NULL)
{
...
}
else{
ERREUR
}
Alors ca marche
Maintenant je ne veux plus mettre le chemin en dur, d'ou mon GetModuleFileName
Or celui me recupere "\StorageCard\Projet_Flacon.ini"
Je fais ma boucle comme expliquer plus haut, ce qui me redonne "\\Storage Card\\Projet_Falcon.ini"
Mais là si je rappelle la procedure "LireFichierIni()", je passe dans la condition "else" =>ERREUR
Il y a forcément un truc pas clair, puisque le chemin est le même normalment!
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 19 oct. 2007 à 16:29
Et dire que depuis le debut tu disais ca et que je faisais la sourde oreille ^^
Au final je me retrouve avec seulement 5 lignes de codes, et ca fonctionne!!