FAQ C++ BuilderConsultez toutes les FAQ

Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe C++ Builder de Developpez.

Commentez cette FAQ : Commentez


SommaireSystèmeFichiers .INI (12)
précédent sommaire suivant
 

L'accès aux fichiers .ini se fait grâce au type TIniFile dont l'utilisation nécessite d'inclure IniFiles.hpp.

Code c++ : Sélectionner tout
#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à.

Code c++ : Sélectionner tout
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.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
[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.

Mis à jour le 31 janvier 2005 Laurent Dardenne 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é :

Code c++ : Sélectionner tout
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 :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
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 :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
[Section bool] 
Clé bool=1 
[Section TDate] 
Clé TDate=28/10/2004 
[Section int] 
Clé int=29 
[Section AnsiString] 
Clé AnsiString=Test.ini

Mis à jour le 31 janvier 2005 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 :

Code c++ : Sélectionner tout
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 :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.

Mis à jour le 31 janvier 2005 Ricky81

La méthode SectionExists permet de déterminer si une section existe ou non dans le fichier .ini.

Code c++ : Sélectionner tout
bool __fastcall SectionExists(const AnsiString Section);
Section spécifie la section du fichier .ini à rechercher.

Mis à jour le 31 janvier 2005 Laurent Dardenne

La méthode ValueExists permet de déterminer si une clé existe ou non dans le fichier .ini.

Code c++ : Sélectionner tout
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é.

Mis à jour le 31 janvier 2005 Laurent Dardenne

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.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
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é.

Mis à jour le 31 janvier 2005 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.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
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é.

Mis à jour le 31 janvier 2005 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.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
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é.

Mis à jour le 31 janvier 2005 Ricky81

On combine l'appel des méthodes ReadSections et ReadSectionValues.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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; 
}

Mis à jour le 31 janvier 2005 Laurent Dardenne Ricky81

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.

Code c++ : Sélectionner tout
void __fastcall EraseSection(const AnsiString Section);

Mis à jour le 31 janvier 2005 Laurent Dardenne

La méthode DeleteKey efface la valeur donnée associée à une entrée dans le fichier .ini.

Code c++ : Sélectionner tout
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.

Mis à jour le 31 janvier 2005 Ricky81

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.

Mis à jour le 31 janvier 2005 Nono40

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2020 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.