Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

C++

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > Système > Fichiers .INI
        Comment créer/ouvrir un fichier .ini ?
        Comment créer la structure d'un fichier .ini ?
        Comment lire le contenu d'un fichier .ini ?
        Comment savoir si une section existe dans un fichier .ini?
        Comment savoir si une clé existe dans un fichier .ini?
        Comment lire les noms de toutes les sections d'un fichier .ini ?
        Comment lire les noms de clés d'une section particulière dans un fichier .ini ?
        Comment lire l'ensemble des valeurs d'une section d'un fichier .ini ?
        Comment lire l'ensemble des valeurs de toutes les sections d'un fichier .ini ?
        Comment supprimer une section dans un fichier .ini ?
        Comment supprimer une clé dans un fichier .ini ?
        Comment écrire un TColor dans un fichier .ini ?



Comment créer/ouvrir un fichier .ini ?
Créé le 31/01/2005[haut]
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.

#include <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 : faq Comment créer la structure d'un fichier .ini ?

Comment créer la structure d'un fichier .ini ?
Créé le 31/01/2005[haut]
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 : faq Comment créer/ouvrir un fichier .ini ?

Comment lire le contenu d'un fichier .ini ?
Créé le 31/01/2005[haut]
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 : faq Comment savoir si une section existe dans un fichier .ini?
lien : faq Comment savoir si une clé existe dans un fichier .ini?
lien : faq Comment lire les noms de toutes les sections d'un fichier .ini ?
lien : faq Comment lire les noms de clés d'une section particulière dans un fichier .ini ?
lien : faq Comment lire l'ensemble des valeurs d'une section d'un fichier .ini ?
lien : faq Comment lire l'ensemble des valeurs de toutes les sections d'un fichier .ini ?

Comment savoir si une section existe dans un fichier .ini?
Créé le 31/01/2005[haut]
auteur : Laurent Dardenne
La méthode SectionExists permet de déterminer si une section existe ou non dans le fichier .ini.

bool __fastcall SectionExists(const AnsiString Section);
Section spécifie la section du fichier .ini à rechercher.

lien : faq Comment savoir si une clé existe dans un fichier .ini?

Comment savoir si une clé existe dans un fichier .ini?
Créé le 31/01/2005[haut]
auteur : Laurent Dardenne
La méthode ValueExists permet de déterminer si une clé existe ou non dans le fichier .ini.

bool __fastcall ValueExists(const AnsiString Section, const AnsiString Ident);
Section spécifie la section du fichier .ini dans laquelle rechercher la clé, et Ident le nom de la clé.

lien : faq Comment savoir si une section existe dans un fichier .ini?
lien : faq Comment lire les noms de clés d'une section particulière dans un fichier .ini ?

Comment lire les noms de toutes les sections d'un fichier .ini ?
Créé le 31/01/2005[haut]
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 : faq Comment savoir si une section existe dans un fichier .ini?

Comment lire les noms de clés d'une section particulière dans un fichier .ini ?
Créé le 31/01/2005[haut]
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é.


Comment lire l'ensemble des valeurs d'une section d'un fichier .ini ?
Créé le 31/01/2005[haut]
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 : faq Comment lire l'ensemble des valeurs de toutes les sections d'un fichier .ini ?

Comment lire l'ensemble des valeurs de toutes les sections d'un fichier .ini ?
Créé le 31/01/2005[haut]
auteurs : Laurent Dardenne, Ricky81
On combine l'appel des méthodes ReadSections et ReadSectionValues.

TIniFile *f;
AnsiString section;

try
{
   TStringList *lSections = new TStringList();
   TStringList *lValeurs = new TStringList();

   f = new TIniFile("C:\\Test.ini");
   f->ReadSections(lSections);
   for(int i=0 ; i < lSections->Count ; ++i)
   {
      section = lSections->Strings[i];
      f->ReadSectionValues(section, lValeurs);
      Memo1->Lines->Append(section);
      Memo1->Lines->AddStrings(lValeurs);
   }

   delete lSections;
   delete lValeurs;
}
__finally
{
   delete f;
}
lien : faq Comment lire l'ensemble des valeurs d'une section d'un fichier .ini ?
lien : faq Comment lire les noms de toutes les sections d'un fichier .ini ?

Comment supprimer une section dans un fichier .ini ?
Créé le 31/01/2005[haut]
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);

Comment supprimer une clé dans un fichier .ini ?
Créé le 31/01/2005[haut]
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.


Comment écrire un TColor dans un fichier .ini ?
Créé le 31/01/2005[haut]
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.


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web