Fichiers .ini ?? - api windows

Résolu
Signaler
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
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

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Ben les apis du genre WritePrivateProfileString() marchent bien.
Messages postés
209
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
14 août 2007

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.
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

.....................

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 ... . . . . . . . . .
Messages postés
209
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
14 août 2007

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.
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

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 ... . . . . . . . . .
Messages postés
209
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
14 août 2007

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.
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

merci pour ton aide

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

I always need help ... . . . . . . . . .
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
12
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..."
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
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é.
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

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 ... . . . . . . . . .
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

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 ... . . . . . . . . .
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

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 ... . . . . . . . . .
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

'verrai ça plus tard là je suis occupé . dsl

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

I always need help ... . . . . . . . . .
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
ui, tt simplement....



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

___________________________________________________________
Magicalement
Nono