Problème bizarre lecture fichier ini

Résolu
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013 - 6 juil. 2010 à 08:28
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013 - 7 juil. 2010 à 08:29
Bonjour à tous !!!

Bon mon problème est vraiment très étrange...
J'ai un code censé lire un fichier Test.ini situé dans le même dossier que mon exécutable sous Visual C++.

Voici le bout de code...

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#pragma comment(lib, "User32.lib")


int main(int argc, char *argv[])
{
char Entree[7] = "";

GetPrivateProfileString("TEST", "Entry", "Erreur", Entree, sizeof(Entree), "Test.ini");
printf("%s\n", Entree);
system("Pause");
}


Et voici le fichier ini...

[TEST]

Entry=coucou



Je pensais que c'était du ai fait que le fichier devait se trouver dans C:\\WINDOWS sous XP...

Mais après essai aucun changement : le code se lance affiche le message d'erreur mais n'arrive pas à lire la clé en question !!!

Si il y avait une âme charitable pour m'aider ce serait avec grand plaisir !!!
Parce que là je suis paumé

Merci en tout cas pour ce super site

14 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
6 juil. 2010 à 21:55
Je viens de tester et c'est vrai ça affiche "Error...". Le problème vient de la configuration de ton projet car tu utilises Unicode alors que tes chaines sont en ANSI. A la compilation, des warnings sont affichés pour signaler la présence de chaines non Unicode parmi les paramètres des fonctions utilisant Unicode. Regarde mon tuto sur l'utilisation de Visual C/C++ Express 2005:
PROGRAMMER-WIN32-AVEC-VISUAL-EXPRESS
Tu y trouveras comment configurer ton projet pour éviter Unicode.
Après cette petite modification dans les options du projet, ça marche à présent très bien chez moi. N'oublie pas de mettre le fichier "test.ini" à coté de l'exécutable car ce n'est pas le cas dans ton projet.
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
6 juil. 2010 à 11:13
Salut,
Il est préférable d'éviter le dossier C:\Windows. En dernier paramètre de GetPrivateProfileString(), mets le chemin complet de ton fichier .ini. Utilise GetModuleFileName() pour récupérer le chemin complet de ton exécutable puis remplace le nom de ce dernier par "Test.ini". Regarde mon dernier code source pour avoir un exemple de cette modification. Pense aussi à augmenter la taille de ton buffer Entree car 7 est le strict minimum pour ton code.
0
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013
6 juil. 2010 à 12:44
Tout d'abord merci de ta réponse !!!

Mais malheureusement aucune amélioration

Il m'affiche toujours "Error"...

Voilà ce que ça donne avec ton code ( très pratique d'ailleurs ^^ )

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#pragma comment(lib, "User32.lib")
#define MAX_PATH 1000
#define TAILLE_MAX 1000


int main(int argc, char *argv[])
{
char Entree[TAILLE_MAX] = "";
char ExePath[MAX_PATH] = "";

GetModuleFileName(0, ExePath, MAX_PATH);

lstrcpy(strrchr(ExePath, '\\')+1,"Test.ini"); 

GetPrivateProfileString("TEST", "Entry", "Error...", Entree, sizeof(Entree), ExePath);
printf("%s\n", Entree);
system("Pause");
}


Et toujours rien...

Par contre impossible de compiler cette ligne :
DWORD attrib = GetFileAttributes(ExePath);


L'utilisation de l'identificateur apparaît non conforme...

Merci encore à toi de m'aider parce que là je vois toujours pas
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
6 juil. 2010 à 17:44
Es-tu sûr que ton fichier "test.ini" est dans le même répertoire que l'exécutable?
Tu utilises quel compilateur?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013
6 juil. 2010 à 18:31
Comme compilateur c'est Visual C++ 2005 Express...

Pour la ligne qui ne compilait pas je pense que c'était Visual qui n'acceptait pas...
Avec ce code ça compile mais toujours le même message enfin plus d'autres sorties...

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#pragma comment(lib, "User32.lib")
#define MAX_PATH 1000
#define TAILLE_MAX 1000


int main(int argc, char *argv[])
{
FILE* Source = NULL;
FILE* Resultat = NULL;
char hexadecimal[3] = "";
long resultat = 0;

char Entree[TAILLE_MAX] = "";
char ExePath[MAX_PATH] = "";
DWORD attrib = 0;

GetModuleFileName(0, ExePath, MAX_PATH);

lstrcpy(strrchr(ExePath, '\\')+1,"Test.ini");
attrib = GetFileAttributes(ExePath);

printf("%s\n", ExePath);
printf("%d\n", attrib);

if(attrib == INVALID_FILE_ATTRIBUTES)
{
printf("Erreur localisation fichier Test.ini\n");
system("Pause");
exit(EXIT_FAILURE);
}

GetPrivateProfileString("TEST", "Entry", "Error...", Entree, sizeof(Entree), ExePath);
printf("%s\n", Entree);
system("Pause");
exit(EXIT_SUCCESS);
}


Avec ce code là j'obtiens : 'c' puis '2080' puis 'Error...'... Ça en devient rageant

Le fichier 'Test.ini' est bien dans le dossier de l'exécutable ( cf l'image pour ma bonne foi ^^ )



Si tu as encore des idées... A tout hasard...
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
6 juil. 2010 à 18:45
Bonjour
je suppose que tu débogues ton soft depuis visual,
le chemin de travail est au niveau au dessus,
(celui de ton projet)

___________________________________________________________
Magicalement
Nono
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
6 juil. 2010 à 18:50
Mets une autre copie de "test.ini" dans le dossier du projet. Essaie avec la version Release au lieu de Debug en lançant l'exe depuis le dossier Release. Si tu peux, dépose ton projet complet quelque part sur le net pour qu'on puisse tester. Je pourrais voir ça ce soir. J'utilise toujours cette fonction sans aucun problème.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
6 juil. 2010 à 18:57
Je viens de voir la réponse de magic_nono car elle est déposée pendant que j'étais en train de saisir mon dernier message. Justement c'est pour cela que je te demandais quel compilateur tu utilises.
0
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013
6 juil. 2010 à 18:58
Bonjour à toi

Oui je débogue bien avec Visual...

Pour tout te dire j'ai essaye de le mettre soit avec l'exe ( ce dont je doutais un peu vu que c'est le dossier de sortie débogage comme tu le dis ^^ )
soit dans le dossier du code source vu que généralement dans mes autres programme tout sortait par là...

Je viens d'essayer dans le répertoire parent... Toujours rien

Mêmes messages d'erreur...
0
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013
6 juil. 2010 à 19:15
Je vous dépose le programme complet à ce lien...

http://www.2shared.com/file/y3oJoVQZ/TestINI.html
( c'est tout en bas de la page en tout petit pour le télécharger ^^ )

Mais à vrai dire il y a rien de neuf vu que je voulais juste tester la fonction avant de l'implanter dans un autre soft...

Mais visiblement ça va être compliqué

Bon sinon avec Release et en lançant l'exe j'ai toujours les mêmes messages...
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
6 juil. 2010 à 20:19
Je viens de créer un nouveau projet console puis j'y ai collé ton code et ton fichier ini. Tout marche parfaitement exactement comme prévu. Au lieu du fichier .c et .ini, mets en téléchargement un projet minimal nous permettant de reproduire ton problème.
0
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013
6 juil. 2010 à 20:25
Oups... Autant pour moi

Donc voilà le nouveau lien

http://www.2shared.com/file/tz-nbBvW/TestINI.html

Là il y a tout mais ça marche toujours pas sur un nouveau projet... Au final ça doit être Visual qui est peut-être mal configuré
0
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013
6 juil. 2010 à 20:29
Sorry pour le double post mais ce soir je vais chez un ami donc je ne pourrais sans doute pas vous répondre avant demain...

Sur cela bonne nuit si je ne peux pas vous répondre
0
OrbLux Messages postés 10 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 16 juillet 2013
7 juil. 2010 à 08:29
Enfin ça fonctionne

Merci à vous deux en tout cas pour votre aide...
Et merci à toi pour ce magnifique tuto
0
Rejoignez-nous