Problème bizarre lecture fichier ini [Résolu]

Messages postés
10
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
16 juillet 2013
- - Dernière réponse : 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
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
0
Merci
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.
Commenter la réponse de racpp
Messages postés
10
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
16 juillet 2013
0
Merci
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
Commenter la réponse de OrbLux
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
0
Merci
Es-tu sûr que ton fichier "test.ini" est dans le même répertoire que l'exécutable?
Tu utilises quel compilateur?
Commenter la réponse de racpp
Messages postés
10
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
16 juillet 2013
0
Merci
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...
Commenter la réponse de OrbLux
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
0
Merci
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
Commenter la réponse de magic_Nono
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
0
Merci
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.
Commenter la réponse de racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
0
Merci
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.
Commenter la réponse de racpp
Messages postés
10
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
16 juillet 2013
0
Merci
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...
Commenter la réponse de OrbLux
Messages postés
10
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
16 juillet 2013
0
Merci
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...
Commenter la réponse de OrbLux
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
0
Merci
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.
Commenter la réponse de racpp
Messages postés
10
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
16 juillet 2013
0
Merci
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é
Commenter la réponse de OrbLux
Messages postés
10
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
16 juillet 2013
0
Merci
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
Commenter la réponse de OrbLux
Messages postés
10
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
16 juillet 2013
0
Merci
Enfin ça fonctionne

Merci à vous deux en tout cas pour votre aide...
Et merci à toi pour ce magnifique tuto
Commenter la réponse de OrbLux