Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1978 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++ et MFC] fichier ini

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++ et MFC] fichier ini

n°384543
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 15:39:14  profilanswer
 

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

mood
Publicité
Posté le 06-05-2003 à 15:39:14  profilanswer
 

n°384549
skeye
Posté le 06-05-2003 à 15:40:30  profilanswer
 

Un fichier ini tu mets ce que tu veux dedans...En général c'est des fichiers texte, tout simplement!

n°384552
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 15:42:05  profilanswer
 

il n'y a pas de syntaxe spéciale à respecter ?
genre les
[gnagna]
var1=
var2=
var3=
 
[gnagna2]
var1b=
...
 ??

n°384562
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 15:44:21  profilanswer
 

skeye a écrit :

Un fichier ini tu mets ce que tu veux dedans...En général c'est des fichiers texte, tout simplement!

:non:  :non:  :non:  
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)


Message édité par harrysauce le 06-05-2003 à 15:44:49
n°384566
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 15:45:37  profilanswer
 

harrysauce a écrit :

:non:  :non:  :non:  
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)


je n'ai pas msdn, mais je vais chercher tes fonctions sur la msdn online, merci :jap:

n°384569
skeye
Posté le 06-05-2003 à 15:47:17  profilanswer
 

harrysauce a écrit :

:non:  :non:  :non:  
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)


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...

n°384579
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 15:49:51  profilanswer
 

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 ?

n°384582
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 15:50:20  profilanswer
 

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 ;)

n°384586
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 15:51:42  profilanswer
 

backdafuckup a écrit :

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 ?
 


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...

n°384599
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 15:54:18  profilanswer
 

skeye 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...

ben ce format la est tres bien!! Ca sert a rien de reinventer la roue :D

mood
Publicité
Posté le 06-05-2003 à 15:54:18  profilanswer
 

n°384609
skeye
Posté le 06-05-2003 à 15:56:33  profilanswer
 

harrysauce a écrit :

ben ce format la est tres bien!! Ca sert a rien de reinventer la roue :D


J'aime bien réinsventer la roue, moi...:D
'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?

n°384613
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 15:58:41  profilanswer
 

skeye a écrit :


J'aime bien réinsventer la roue, moi...:D
'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?


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...)

n°384618
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 16:00:03  profilanswer
 

skeye a écrit :


J'aime bien réinsventer la roue, moi...:D
'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?

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....


Message édité par harrysauce le 06-05-2003 à 16:00:51
n°384624
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 16:01:07  profilanswer
 

backdafuckup 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...)

ca marche?

n°384628
skeye
Posté le 06-05-2003 à 16:02:00  profilanswer
 

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.....
 
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....


bon bon jdis plus rien moi... :kaola:  
En tout cas il a tout ce qu'il faut avec tes réponses pour faire ce qu'il veut...

n°384646
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 16:08:39  profilanswer
 

skeye a écrit :


bon bon jdis plus rien moi... :kaola:  
En tout cas il a tout ce qu'il faut avec tes réponses pour faire ce qu'il veut...

:lol:

n°384648
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 16:09:22  profilanswer
 

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 ??

n°384657
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 16:12:57  profilanswer
 

backdafuckup a écrit :

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 ??

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....

n°384660
VisualC++
J'va y penser ...
Posté le 06-05-2003 à 16:14:02  profilanswer
 

Non WritePrivateProfileString c est Win32
 

Code :
  1. The WritePrivateProfileString function copies a string into the specified section of the specified initialization file.
  2. This function is provided for compatibility with 16-bit Windows-based applications. WIn32-based applications should store initialization information in the registry.
  3. BOOL WritePrivateProfileString(
  4.   LPCTSTR lpAppName,  // pointer to section name
  5.   LPCTSTR lpKeyName,  // pointer to key name
  6.   LPCTSTR lpString,   // pointer to string to add
  7.   LPCTSTR lpFileName  // pointer to initialization filename
  8. );


 
C'est la version Get/WriteProfileString/Int qui fait partit de CWinApp (et qui utilise la bdr pour les noyaux NT.

n°384664
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 16:15:10  profilanswer
 

:lol: :lol: :lol:
 
le ApplicationName correspond au nom de la section ;)
 
fais un copier/coller de mon exemple et regarde si ca marche...
 
edit : grillé  :sweat:


Message édité par harrysauce le 06-05-2003 à 16:16:23
n°384669
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 16:17:50  profilanswer
 

VisualC++ a écrit :

Non WritePrivateProfileString c est Win32
 

Code :
  1. The WritePrivateProfileString function copies a string into the specified section of the specified initialization file.
  2. This function is provided for compatibility with 16-bit Windows-based applications. WIn32-based applications should store initialization information in the registry.
  3. BOOL WritePrivateProfileString(
  4.   LPCTSTR lpAppName,  // pointer to section name
  5.   LPCTSTR lpKeyName,  // pointer to key name
  6.   LPCTSTR lpString,   // pointer to string to add
  7.   LPCTSTR lpFileName  // pointer to initialization filename
  8. );


 
C'est la version Get/WriteProfileString/Int qui fait partit de CWinApp (et qui utilise la bdr pour les noyaux NT.


 
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 ?
 

n°384675
skeye
Posté le 06-05-2003 à 16:19:35  profilanswer
 

:whistle:

n°384676
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 16:20:05  profilanswer
 

backdafuckup a écrit :


 
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 ?
 
 


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" )


Message édité par harrysauce le 06-05-2003 à 16:20:52
n°384680
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 06-05-2003 à 16:21:11  profilanswer
 

backdafuckup a écrit :


 
Et est ce que GetPrivateProfileString permet de récupérer vraiment des entiers en sortie ?


 
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


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°384681
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 16:21:39  profilanswer
 

harrysauce 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" )


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 ?

n°384687
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 16:24:01  profilanswer
 

backdafuckup 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 ?
 


je savais pas qu'elle existait celle la :D

n°384707
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 16:34:54  profilanswer
 

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 ?

n°384709
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 06-05-2003 à 16:36:06  profilanswer
 

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.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°384711
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 16:36:50  profilanswer
 

Tetragrammaton IHVH a écrit :


 
j'ai jamais testé mais ça doit parfaitement marcher puisqu'au final tout est stocké sur des char.


:jap:

n°384825
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 17:14:08  profilanswer
 

Je vous remercie beaucoup messieurs, ca marche à merveille...
Un seul détail me tiraille un peu :
 

Code :
  1. Vr1 = GetPrivateProfileInt("CCD Voltages","Vr1",Vr1,"CCD.ini" );


 
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 ?

n°384841
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 17:21:29  profilanswer
 

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é.

n°384845
backdafuck​up
Back to da old skool
Posté le 06-05-2003 à 17:22:39  profilanswer
 

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...

n°384850
harrysauce
Miaaaooou!
Posté le 06-05-2003 à 17:23:37  profilanswer
 

backdafuckup a écrit :


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...

si tu utilise Get*Int oui, sinon c'est une chaine....

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++ et MFC] fichier ini

 

Sujets relatifs
[PHP] Distinguer un réperoire d'un fichier sans extension[BATCH] Fichier initialisation ?
[JAVA] Ecrire a la fin d'un fichier[PHP] Rechercher dans un fichier .doc
[MFC VC++ 6] bulles sur les trayicons[C] j'ai un probleme pour écrire dans un fichier
ecrire et lire dans un fichier en visual basic 6 ?Enregistrer une extension de fichier auprès de Microsoft ?
Ajouter une chaine au début d'un fichierFichier Batch : comment insérer des balises ? [Pb résolu]
Plus de sujets relatifs à : [C++ et MFC] fichier ini


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR