Fichiers .ini ?? - api windows

Résolu
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006 - 1 août 2005 à 17:43
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 3 août 2005 à 23:59
comment ça marche cette bête ?

j'y comprend pas grand chose .

même le truc le plus facile ça marche pas :

WritePrivateProfileString( "My_Option","My_Key","My_Add","My_file.ini" );

MSDN dit à propos de ce truc : "This function is provided only for compatibility with 16-bit versions
of Windows. Applications should store initialization information in the
registry."
ça veut dire quoi ça "16-bits" ??

bref éclairez moi un peu sur les fichiers .ini



thx


<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .

18 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
1 août 2005 à 22:10
Salut,

Ben les apis du genre WritePrivateProfileString() marchent bien.
3
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
2 août 2005 à 18:07
Salut,



Rien de particulier, selon MSDN
(voir en bas de la page, les pré-requis) : le prototype est compris
dans windows.h et la routine est définie dans le noyau (kernel32.dll).
Donc, pas grand chose à faire.



Ciao.
3
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
3 août 2005 à 22:03
.....................

il suffisait de mettre le chemin complet à la place du nom -_-

WritePrivateProfileString( "Premier","Dialogue","Coucou","C:\\Documents
and Settings\\DEVAUX\\Mes documents\\Dorian\\C++\\API Windows\\Mon
dialogue.ini" );

encore une idioterie de plus à ajouter à ma liste :p



bref c'est résolu .



merci tout le monde !^^



bye++++

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
3
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
1 août 2005 à 18:13
Salut,

En gros, ça veut dire que c'est une routine maintenue uniquement pour faire tourner les applications initialement prévues pour un système d'exploitation 16 bits (avant Windows 95, il me semble) sur des systèmes plus modernes.

Bien évidemment, cette histoire de 16 ou 32 bits est directement correllée avec le matériel sur lequel tourne le système d'exploitation (relatif à l'espace mémoire que peut gérer le système).

Microsoft conseille de stocker les informations relatives à un profil utilisateur dans la base de registres (et donc, d'utiliser les API associées) au leiu de les enregistrer dans un fichier *.ini

Tout dépend de ce que tu souhaites faire...

A plus tard.
0

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

Posez votre question
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
1 août 2005 à 20:18
bon à part ça ... vous connaissez pas un methode pour écrire dans des fichiers ini efficace et qui marche (surtout ça!) ?

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
1 août 2005 à 20:56
Il me semble qu'il existe un composant de Microsoft pour faire cela, mais je n'ai pas réussi à remettre la main dessus.

CodeGuru.com propose iciune classe en C++ efficiente.



A plus tard.



PS. Je cherche quand même pour la classe de Microsoft.
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
1 août 2005 à 21:29
merci pour ton aide

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
2 août 2005 à 11:58
et pi tu trouveras sur le site, de nombreux exemple de WritePrivateProfileString() et GetPrivateProfileString() sur le site !
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
2 août 2005 à 15:03
ces fonctions nous embettaient aussi par leur complexité, (meme si elles sont il est vrai fort simple)

depuis qu'on les a surchargée,

nous n'utilisons plus que leur surcharge d'usage évident....



un set et un get, pour le plus simple...

(Nota: BFichierIni, en ligne sur ce site facilite égalt la gestion de listes, combos....)





Si ça peux t'être utilie à toi aussi....





bool BFichierIni::set(const BString& section, const BString&
key, const BString& file, const BString& message,const bool
warningMeF)

{

///
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/// ---------------- BFichierIni::set(const BString& section ,const
BString& key ,const BString& file ,const BString& message
,const bool warningMeF) -> bool ----------------

///
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- Objectif : inscription d'une entrée dans un fichier ini

/// ----- Auteur(s) : Magic_Nono 01/06/01

/// ----- PreCond : /

/// ----- PostCond : /

/// ----- Etat :
2
(-1<0<1<2)

/// ----- MaJ 17/11/04 : prendre en cpte les noms de fichier en absolu

/// ----- MaJ 07/12/04 : vérif ligne seule,

///+ actu : exception

/// ----- MaJ 09/01/05 : trad en \\n si nécessaire... (sachant
que la récup doit en prendre compte!!!) => avec warning éventuel

///
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- const BString& section : section : [..]

/// ----- const BString& key : clef : avt le '='

/// ----- const BString& file : fichier ini

/// ----- const BString& message : valeur : apres le '='

/// ----- const bool warningMeF(par défaut :
'false') : prévenir l'utilisateur en cas de
transformation en ligne (laissé à faux par défaut pour éviter de
perturber les prog préexistants...)

///
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- retour (bool) : succès

///
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- Var : classes externes dont on appelle des méthodes (1) : BVisuel

/// ----- Var Muettes (cf.partie préc) (5) : file ,key ,message ,section ,warningMeF

/// ----- Var Internes à la fonction (5) : bce ,dir ,folder ,message2 ,out

/// ----- Var Utilisées par adresse (2) : dir ,file

/// ----- Var In (5) : file ,key ,message ,section ,warningMeF

BString message2="";

if(message.checkIn("\n"))

{

// PB1("enregistrement d'une multiligne dans un fichier ini!!! NOK");

static bool bce=warningMeF;

if(bce)


BVisuel::informe("attention, votre fichier ini comportera des sections
mises en forme automatiquement (\'\\n\'=>"\\n")");

bce=false;

message2=message.convertTxtMisEnForme(true);

}

char dir[256];

BString folder;

if(file.getLength()<2 || file[1]!=':')

{

GetCurrentDirectory( 256,dir);

folder=dir;



#ifdef _DEBUG_PARAMETER_TO_GET_RID_OF_WIERD_PATH_FROM_VC_

folder+="\\Debug\";



#else /* _DEBUG_PARAMETER_TO_GET_RID_OF_WIERD_PATH_FROM_VC_ */



folder+="\";

#endif /* _DEBUG_PARAMETER_TO_GET_RID_OF_WIERD_PATH_FROM_VC_ */



folder+=file;

}

else

folder=file;

//section, key,string to add, initialization filename

int out;

if(!message2.getLength())


out=WritePrivateProfileString(LPCTSTR(section),LPCTSTR(key),LPCTSTR(message),LPCTSTR(folder));

else


out=WritePrivateProfileString(LPCTSTR(section),LPCTSTR(key),LPCTSTR(message2),LPCTSTR(folder));

return(!out);

}





BString BFichierIni::get(const BString& section, const BString& key, const BString& file,bool avecWarningSiErreur)

{

///
--------------------------------------------------------------------------------------------------------------------------------------------------------

/// ---------------- BFichierIni::get(const BString& section ,const
BString& key ,const BString& file ,bool avecWarningSiErreur)
-> BString ----------------

///
--------------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- Objectif : récupération d'une entrée dans un fichier ini

/// ----- Auteur(s) : Magic_Nono 26/04/03

/// ----- PreCond : /

/// ----- PostCond : /

/// ----- Etat :
2
(-1<0<1<2)

/// ----- MaJ 19/04/04 : gestion de lignes plus longues que 256 car...

///
--------------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- const BString& section : [section]

/// ----- const BString& key : clef=

/// ----- const BString& file : fichier

/// ----- bool avecWarningSiErreur(par défaut : 'true') : signaler erreur

///
--------------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- retour (BString) : valeur

///
--------------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- Var : classes externes dont on appelle des méthodes (1) : BVisuel

/// ----- Var Muettes (cf.partie préc) (4) : avecWarningSiErreur ,file ,key ,section

/// ----- Var Internes à la fonction (7) : answer ,dir ,folder ,i ,out ,rep ,section2

/// ----- Var Utilisées par adresse (3) : answer ,dir ,file

/// ----- Var In (4) : avecWarningSiErreur ,file ,key ,section

/// ----- Var In Globales Constantes (1) : LONGMAXREP

//cout<<"appel getIniFile"<<endl; cout.flush();

//modif cb 17/11/01 pour prendre en cpte les noms de fichier en absolu

char dir[LONGMAXREP];

char answer[LONGMAXREP];

BString folder;

if(file.getLength()<2 || file[1]!=':')

{

GetCurrentDirectory( LONGMAXREP,dir);

folder=dir;

/*#ifdef _DEBUG_PARAMETER_TO_GET_RID_OF_WIERD_PATH_FROM_VC_

folder += "\\Debug\";

#else

*/

folder+="\";

//#endif

folder+=file;

}

else

folder=file;

//section, key, default,

//destination buffer, size of destination buffer,

//initialization filename

BString section2;

section2=section;

GetPrivateProfileString(LPCTSTR(section2),LPCTSTR(key),"default",answer,LONGMAXREP,LPCTSTR(folder));

BString out(answer);

if(out.getLength()==LONGMAXREP-1)

{

//
BVisuel::alerte("la chaîne du .ini est peut-etre
trop longue...");

int i=1;

char*rep;

do

{

i++;

ALLOUEn(rep,char,i*LONGMAXREP+1);


GetPrivateProfileString(LPCTSTR(section2),LPCTSTR(key),"default",rep,LONGMAXREP*i,LPCTSTR(folder));

out=rep;

FREE(rep);

}

while(out.getLength()==(unsigned int)(LONGMAXREP*i-1));

}

if(avecWarningSiErreur && out=="default")

BVisuel::alerte("pb Fichier
"+file+"\nnon présent ou non OK \n lors de la recherche de
["+section2+(BString)"]->"+key);

return out;

}




___________________________________________________________
Magicalement
Nono
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
2 août 2005 à 16:22
Salut,

WritePrivateProfileString() compliqué ? faut pas abuser quand meme..

Y'a 4 params qui sont évidents: nom du fichier ini, nom de la section, non de la clé, valeur de la clé.
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
2 août 2005 à 16:57
oui,

ceci dit, la gestion des retours chariot

n'étant pas std, par ex, nous avons gagné à utilisé cette lib car l'update n'a nécessité qu'une recompilation.



de plus, on standardise bcp plus facilement ainsi la gestion d'erreurs



exemples parmi tant d'autres des avantages à surcharger les fonctions std selon leur utilisation
___________________________________________________________
Magicalement
Nono
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
2 août 2005 à 17:13
pour pouvoir utiliser WritePrivateProfileString() il faut quoi ? faut inclure quelque chose ou pas ??

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
2 août 2005 à 18:26
dernière question ..................... j'ai retrouvé mon fichier .ini dans le dossier Windows -_-'

on peut changer ça (parce que là ...) ?

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
3 août 2005 à 11:30
t'aurai po fait appel à des fonctions magiques genre

SetRegistryKey



ce genre de bétise te change le comportement de base de ces WritePrivateProfileString et autres....

___________________________________________________________
Magicalement
Nono
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
3 août 2005 à 11:38
je n'ai absolument rien touché au registre .

juste mis une ligne c'est tout ...

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
3 août 2005 à 11:51
vois les fonctions que j'ai mises plus haut,

avec elle, le chemin est spécifié en absolu, dc on est sur de la destination...

___________________________________________________________
Magicalement
Nono
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
3 août 2005 à 11:52
'verrai ça plus tard là je suis occupé . dsl

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
3 août 2005 à 23:59
ui, tt simplement....



G répondu rapidement, car il est vrai que je ne sais plus qu'utiliser ces Bxxx

___________________________________________________________
Magicalement
Nono
0
Rejoignez-nous