| auteurs : Laurent Dardenne, Ricky81 | L'accès aux fichiers .ini se fait grâce au type TIniFile dont l'utilisation nécessite d'inclure IniFiles.hpp. Le nom et l'adresse du fichier en question sont à passer comme paramètres au constructeur. Celui-ci le crée ou l'ouvre s'il existe déjà.
TIniFile * fichier = new TIniFile (" C:\\monfichierini.ini " );
|
Un fichier .ini est un fichier ASCII structuré de la manière suivante : il contient un ou plusieurs noms de sections notés entre crochets, et chaque section contient des couples clé/valeur.
[Section]
NomDeClé= Valeur
[Section2]
NomDeClé1= Valeur
NomDeClé2= Valeur
...
|
Attention, il n'y a aucun contrôle sur la structure d'un fichier .ini, il est possible d'ouvrir un fichier texte quelconque. Dans ce cas, les extractions de clés et/ou valeurs donnent lieu à des résultats aléatoires. L'écriture, par contre, reste possible.
Note : Sous Windows Me/98/95 le système met en cache une version du fichier Win.ini afin d'augmenter les performances. Vous pourrez donc être amené à appeler la méhode UpdateFile pour nettoyer les lectures et les écritures du tampon depuis et vers le fichier .ini sur disque. UpdateFile est utile sous Windows Me/98/95, mais n'a aucun effet sous Windows NT car NT ne met pas de lectures et d'écritures de fichier INI dans un tampon.
|
lien : Comment créer la structure d'un fichier .ini ?
|
| auteur : Ricky81 | On utilise après la création ou l'ouverture du fichier .ini les différentes méthodes WriteXXXX. Il existe une méthode par type de donnée supporté dans un fichier .ini, qui sont au nombre de 8 :
- WriteString pour les valeurs de type AnsiString
- WriteBool pour les valeurs de type bool
- WriteInteger pour les valeurs de type int
- WriteFloat pour les valeurs de type float
- WriteDateTime pour les valeurs de type TDateTime
- WriteDate pour les valeurs de type TDate
- WriteTime pour les valeurs de type TTime
- WriteBinaryStream pour des flux binaires d'un type descendant de TStream
Ces méthodes créent ou mettent à jour la valeur relative à un clé dans une section. Leurs prototypes sont similaires et ne se distinguent que dans le dernier paramètre propre au type traité :
void __fastcall WriteString (const AnsiString Section, const AnsiString Ident, const AnsiString Value);
|
Section identifie la section à considérer, Ident est le nom de la clé concernée, et Value correspond à la valeur qu'on désire faire correspondre à la clé.
Voici un exemple d'écriture dans un fichier .ini :
TIniFile * f;
try
{
f = new TIniFile (" C:\\Test.ini " );
f- > WriteBool (" Section bool " , " Clé bool " , true );
f- > WriteDate (" Section TDate " , " Clé TDate " , Date ());
f- > WriteInteger (" Section int " , " Clé int " , 29 );
f- > WriteString (" Section AnsiString " , " Clé AnsiString " , " Test.ini " );
}
__finally
{
delete f;
}
|
Voici le résultat :
[Section bool]
Clé bool=1
[Section TDate]
Clé TDate=28/10/2004
[Section int]
Clé int=29
[Section AnsiString]
Clé AnsiString=Test.ini
|
|
lien : Comment créer/ouvrir un fichier .ini ?
|
| auteur : Ricky81 | On utilise après l'ouverture du fichier .ini les différentes méthodes ReadXXXX. Il existe une méthode par type de donnée supporté dans un fichier .ini, qui sont au nombre de 8 :
- ReadString pour les valeurs de type AnsiString
- ReadBool pour les valeurs de type bool
- ReadInteger pour les valeurs de type int
- ReadFloat pour les valeurs de type float
- ReadDateTime pour les valeurs de type TDateTime
- ReadDate pour les valeurs de type TDate
- ReadTime pour les valeurs de type TTime
- ReadBinaryStream pour des flux binaires d'un type descendant de TStream
Ces méthodes lisent la valeur relative à une clé dans une section. Leurs prototypes sont similaires et ne se distinguent que par le type renvoyé et celui de la valeur par défaut :
AnsiString __fastcall ReadString (const AnsiString Section, const AnsiString Ident, const AnsiString Default);
|
Section identifie la section à considérer, Ident est le nom de la clé concernée, et Default correspond à la valeur à renvoyer dans les situations suivantes :
- la section n'existe pas
- la clé n'existe pas
- aucun valeur n'est définie
Voici un exemple de lecture d'un fichier .ini :
TIniFile * f;
bool b;
TDate d;
int i;
AnsiString s;
try
{
f = new TIniFile (" C:\\Test.ini " );
b = f- > ReadBool (" Section bool " , " Clé bool " , false );
d = f- > ReadDate (" Section TDate " , " Clé TDate " , Date ());
i = f- > ReadInteger (" Section int " , " Clé int " , 0 );
s = f- > ReadString (" Section AnsiString " , " Clé AnsiString " , " " );
}
__finally
{
delete f;
}
|
Remarque : la méthode ReadBinaryStream est l'exception à la règle puisque le dernier paramètre est un pointeur vers le flux dans lequel la valeur sera extraite.
|
lien : Comment savoir si une section existe dans un fichier .ini?
lien : Comment savoir si une clé existe dans un fichier .ini?
lien : Comment lire les noms de toutes les sections d'un fichier .ini ?
lien : Comment lire les noms de clés d'une section particulière dans un fichier .ini ?
lien : Comment lire l'ensemble des valeurs d'une section d'un fichier .ini ?
lien : Comment lire l'ensemble des valeurs de toutes les sections d'un fichier .ini ?
|
| auteur : Ricky81 | La méthode ReadSections lit et renvoie les noms de toutes les sections dans un objet de type descendant de TStrings comme par exemple TStringList, ou la propriété Lines d'un TMemo.
TIniFile * f;
try
{
TStringList * l = new TStringList ();
f = new TIniFile (" C:\\Test.ini " );
f- > ReadSections (l);
ShowMessage (IntToStr (l- > Count)+ " sections présentes. " );
delete l;
}
__finally
{
delete f;
}
|
Remarque : le contenu de l'objet est écrasé.
|
lien : Comment savoir si une section existe dans un fichier .ini?
|
| auteur : Ricky81 | La méthode ReadSection lit et renvoie tous les noms de clés d'une section donnée dans un objet de type descendant de TStrings, comme par exemple TStringList, ou la propriété Lines d'un TMemo.
TIniFile * f;
try
{
f = new TIniFile (" C:\\Test.ini " );
f- > ReadSection (" Section bool " , Memo1- > Lines);
}
__finally
{
delete f;
}
|
Remarque : le contenu de l'objet est écrasé.
|
| auteur : Ricky81 | La méthode ReadSectionValues lit les valeurs de l'ensemble des clés d'une section donnée et les envoie à un objet de type descendant de TStrings sous la forme "clé=valeur". Les valeurs sont donc converties dans leur représentation AnsiString.
TIniFile * f;
try
{
f = new TIniFile (" C:\\Test.ini " );
f- > ReadSectionValues (" Section int " , Memo1- > Lines);
}
__finally
{
delete f;
}
|
Remarque : le contenu de l'objet est écrasé.
|
lien : Comment lire l'ensemble des valeurs de toutes les sections d'un fichier .ini ?
|
| auteur : Laurent Dardenne | La méthode EraseSection supprime l'ensemble des couples clé/valeur déclarés dans une section, tout en supprimant également la section proprement dite.
void __fastcall EraseSection (const AnsiString Section);
|
|
| auteur : Ricky81 | La méthode DeleteKey efface la valeur donnée associée à une entrée dans le fichier .ini.
void __fastcall DeleteKey (const AnsiString Section, const AnsiString Ident);
|
Section détermine la section concernée, et Ident le nom de la clé pour laquelle le couple clé/valeur va être retiré du fichier.
Remarque : les tentatives de suppression de clés dans une section inexistante ou de suppression de clés inexistantes ne sont pas considérées comme des erreurs. Dans ces situations, DeleteKey ne fait rien.
|
| auteur : Nono40 | Le TColor est en fait un Integer, il donc donc possible d'écrire et de lire une valeur de type TColor avec les méthodes WriteInteger et ReadInteger.
|
Consultez les autres F.A.Q.
|
|