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
- 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 ?
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>
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");
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 | [Section] NomDeClé=Valeur [Section2] NomDeClé1=Valeur NomDeClé2=Valeur ... |
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.
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);
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; } |
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 |
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);
- 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; } |
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 ?
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);
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);
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; } |
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; } |
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; } |
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; } |
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);
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);
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.
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.
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 çaLes 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 © 2024 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.