fichier ini [C++ et MFC] - C++ - Programmation
Marsh Posté le 06-05-2003 à 15:40:30
Un fichier ini tu mets ce que tu veux dedans...En général c'est des fichiers texte, tout simplement!
Marsh Posté le 06-05-2003 à 15:42:05
il n'y a pas de syntaxe spéciale à respecter ?
genre les
[gnagna]
var1=
var2=
var3=
[gnagna2]
var1b=
...
??
Marsh Posté le 06-05-2003 à 15:44:21
skeye a écrit : Un fichier ini tu mets ce que tu veux dedans...En général c'est des fichiers texte, tout simplement! |
oui, c'est du texte mais il existe des fonctions pour les utiliser extrement facilement
je crois que c'est GetPrivateProfileString et WritePrivateProfileString
l'avantage de ces fonctions c'est que tu n'as rien a faire!!!
Pas besoin d'ouvir le fichier, pas besoin de rechercher une section ou une clé...ca fait tout, tout seul!!!
Pour connaitre les arguments de ces fonctions regarde l'aide de vc++ (tape une des fonctions, selectionnes la, puis F1)
Marsh Posté le 06-05-2003 à 15:45:37
harrysauce a écrit : |
je n'ai pas msdn, mais je vais chercher tes fonctions sur la msdn online, merci
Marsh Posté le 06-05-2003 à 15:47:17
harrysauce a écrit : |
mea culpa...connaissais pas ces fonctions!
M'enfin à priori spa très dur de se créer son format d'ini qui va bien si on a envie hein...
Marsh Posté le 06-05-2003 à 15:49:51
alors je viens d'aller voir ces fonctions.
Je travaille sur windows 2000, et d'après la msdn, les fonctions WritePrivateProfileString et ReadPrivateProfileString ecrivent dans la base de registre (pour les plateformes NT). Il n'y a que dans le cas de Win 95 et de Win 3.1 que ces fonctions lisent/ecrivent dans le fichier Win.ini
Et moi j'ai 40 variables à sauvegarder !!!
Il n'y a pas une autre solution par hasard ? ou que quelqu'un développe celle ci ?
Marsh Posté le 06-05-2003 à 15:50:20
apres recherche voici les arguments :
WritePrivateProfileString(
Nom_Section,
Nom_Key,
Chaine_de_caractere,
Nom_Fichier // nom du fichier
);
GetPrivateProfileString(
Nom_Section,
Nom_Key,
Default, // string par default
Destination,
Taille_destination,
Nom_Fichier // nom du fichier
);
Si tu as un fichier test.ini contenant ca :
[sect1]
key1 = riri
key2 = fifi
key3 = loulou
[sect2]
oncle = donald
tante = daisy
et que tu veux connaitre la valeur de la clé "oncle" de la section "sect2" tu fais :
GetPrivateProfileString(
"sect2",
"oncle",
"", // string par default
string_desti,
taille_max,
"test.ini" // nom du fichier
);
Si tu veux rajouter une clé "ami" dans la section "sect2", tu fais :
WritePrivateProfileString(
"sect2",
"ami",
"mickey",
"test.ini" // nom du fichier
);
Voila, en esperant que c'est bien ce que tu cherchais
Marsh Posté le 06-05-2003 à 15:51:42
backdafuckup a écrit : alors je viens d'aller voir ces fonctions. |
sisi, ca marche ss win2000, c'est juste que depuis win2000 microsoft recommande d'utiliser la base de registre plutot que les .ini.......mais rien ne t'empeche de le faire qd meme...
Marsh Posté le 06-05-2003 à 15:54:18
skeye a écrit : |
ben ce format la est tres bien!! Ca sert a rien de reinventer la roue
Marsh Posté le 06-05-2003 à 15:56:33
harrysauce a écrit : ben ce format la est tres bien!! Ca sert a rien de reinventer la roue |
J'aime bien réinsventer la roue, moi...
'fin bon comme dhab tout dépend de ce qu'il veut faire...si c'est juste pour enregistrer 2/3 variables autant faire un truc tout con qui écrit betement dans un fichier, non?
Marsh Posté le 06-05-2003 à 15:58:41
skeye a écrit : |
Ben j'appréciais bien le concept de "fichier de démarrage", et puis j'ai 40 variables à sauvegarder (pour l'instant c'est de la sauvegarde, mais après ca sera lu sur un port série, c'est pour ca qu'il me fallait un truc rapide, et le coup des sections me semble pas mal en fait...)
Marsh Posté le 06-05-2003 à 16:00:03
skeye a écrit : |
ben non parce que meme pour 2/3 variables avec les fonctions toutes faites c'est fait en 2/3 lignes, tandis que si tu refais les fonctions ca prendra bien plus.....
Et puis si tu refais les fonctions, il faut gérer tous les cas d'erreur.....et la y'a un petit peu de boulot qd meme
Genre la fonction qui ajoute (Write....) si la clé existe deja, ca la modifie....
Marsh Posté le 06-05-2003 à 16:01:07
backdafuckup a écrit : |
ca marche?
Marsh Posté le 06-05-2003 à 16:02:00
harrysauce a écrit : ben non parce que meme pour 2/3 variables avec les fonctions toutes faites c'est fait en 2/3 lignes, tandis que si tu refais les fonctions ca prendra bien plus..... |
bon bon jdis plus rien moi...
En tout cas il a tout ce qu'il faut avec tes réponses pour faire ce qu'il veut...
Marsh Posté le 06-05-2003 à 16:08:39
skeye a écrit : |
Marsh Posté le 06-05-2003 à 16:09:22
j'y travaille....
Le problème est que Visual C++ 6 (qui montre la syntaxe dès que tu commences à taper la fonction) ne me donne pas les memes paramètres que toi...
moi j'ai WritePrivateProfileString(ApplicationName, Keyname, string, filename)...
Donc je n'ai pas de section... La fonction WritePrivateProfileString, elle dépend de quelle classe ? CWinApp ??
Marsh Posté le 06-05-2003 à 16:12:57
backdafuckup a écrit : j'y travaille.... |
t'es sur qu'il a pas d'autres entetes "en stock"???
T'as pas une petite fleche a gauche du "WritePrivateProfileString(ApplicationName, Keyname, string, filename)...
"?????
je vais aller voir sur le msdn....
Marsh Posté le 06-05-2003 à 16:14:02
Non WritePrivateProfileString c est Win32
Code :
|
C'est la version Get/WriteProfileString/Int qui fait partit de CWinApp (et qui utilise la bdr pour les noyaux NT.
Marsh Posté le 06-05-2003 à 16:15:10
le ApplicationName correspond au nom de la section
fais un copier/coller de mon exemple et regarde si ca marche...
edit : grillé
Marsh Posté le 06-05-2003 à 16:17:50
VisualC++ a écrit : Non WritePrivateProfileString c est Win32
|
Mais alors j'utilise quoi moi pour sauvegarder mes 40 variables ????
je voulais les sauvegarder dans un .ini, et on m'a montré ca... j'en fais quoi maintenant ? Parce que moi je travaille sous win2000 !
Et est ce que GetPrivateProfileString permet de récupérer vraiment des entiers en sortie ?
Marsh Posté le 06-05-2003 à 16:20:05
backdafuckup a écrit : |
ce que je t'ai montré marchera, meme sous 2000 (meme si microsoft le deconseille, au profit de la base de registre).....
apres si tu veux un entier il faudra le convertir....
(si tu recuperes un char* tu peux utiliser "atoi" )
Marsh Posté le 06-05-2003 à 16:21:11
backdafuckup a écrit : |
Ben oui, si tu convertis la chaine de char en int (avec atoi())
Note 1 : les INI c'est dépassé. L'époque où on s'"amusait" à bidouiller un INI est heureusement révolu.
Note 2 : la base de registre permet de sauver des profiles différent pour chaque user
Marsh Posté le 06-05-2003 à 16:21:39
harrysauce a écrit : |
Ca je sais, merci, mais s'il existe un GetPrivateProfileInt, pourquoi ne pas s'en servir si cette fonction fait bien ce qu'elle semble faire... non ?
Marsh Posté le 06-05-2003 à 16:24:01
backdafuckup a écrit : |
je savais pas qu'elle existait celle la
Marsh Posté le 06-05-2003 à 16:34:54
ben j'ai vérifié, elle existe, mais à ton avis, est ce que ca marche si on écrit avec WritePrivateProfileString et qu'on lit avec GetPrivateProfileInt ?
Marsh Posté le 06-05-2003 à 16:36:06
backdafuckup a écrit : ben j'ai vérifié, elle existe, mais à ton avis, est ce que ca marche si on écrit avec WritePrivateProfileString et qu'on lit avec GetPrivateProfileInt ? |
j'ai jamais testé mais ça doit parfaitement marcher puisqu'au final tout est stocké sur des char.
Marsh Posté le 06-05-2003 à 16:36:50
Tetragrammaton IHVH a écrit : |
Marsh Posté le 06-05-2003 à 17:14:08
Je vous remercie beaucoup messieurs, ca marche à merveille...
Un seul détail me tiraille un peu :
Code :
|
A quoi sert le paramètre 3 (ici Vr1 nommé par msdn int nDefault) si on met Vr1 = ...
Je pensais qu'il serait initialisé en paramètre 3, et non par une affectation...
C'est moi qui n'ait rien compris ou il y a autre chose ?
Marsh Posté le 06-05-2003 à 17:21:29
le parametre 3 c'est la chaine par defaut, c'est ce qu'il va te renvoyer s'il ne trouve pas la clé que tu lui a filé.
Marsh Posté le 06-05-2003 à 17:22:39
harrysauce a écrit : le parametre 3 c'est la chaine par defaut, c'est ce qu'il va te renvoyer s'il ne trouve pas la clé que tu lui a filé. |
C'est donc en quelque sorte l'entier qui sera affecté s'il ne trouve pas la clé. C'est bien ca ?
oui, ca à l'air d'être ca...
Marsh Posté le 06-05-2003 à 17:23:37
backdafuckup a écrit : |
si tu utilise Get*Int oui, sinon c'est une chaine....
Marsh Posté le 06-05-2003 à 15:39:14
Y a t'il une différence entre un fichier ini et un fichier normal (.text ou .dat par exemple) au niveau programmation ?
J'aimerais faire un fichier ini pour mon programme utilisant les MFC.
Ca fait très longtemps que je n'ai pas fait de lectures/ecritures dans les fichiers, et je n'ai pas msdn.
En parcourant sur le msdn online, j'ai découvert la classe CFile, mais les méthodes ne me paraissent pas très claires...
Y a t'il les mêmes possibilités entre CFile et ce bon vieux FILE * avec ses fopen, fscanf, fprintf, fread et fwrite ?
Merci d'avance pour vos renseignements