Utilisation de TIniFile et TMemIniFile
Remonter à Utilisation des fichiers ini et du registre système
Le format de fichier INI est toujours utilisé, et de nombreux fichiers de configuration (comme le fichier DSK de configuration du bureau) sont dans ce format. Ce format est particulièrement utile dans des applications, où vous ne pouvez pas toujours compter sur une base de registres pour stocker les informations de configuration. La VCL/RTL fournit deux classes, TIniFile and TMemIniFile, pour faciliter grandement la lecture et l'écriture des fichiers INI.
TIniFile
travaille directement avec le fichier INI sur disque, tandis que TMemIniFile
stocke toutes les modifications en mémoire et ne les écrit sur disque que lorsque vous appelez la méthode UpdateFile.
- Remarque : Lors de l'utilisation de
TMemIniFile
, vous pouvez utiliser la propriété AutoSave pour enregistrer automatiquement les modifications en mémoire dans le fichier INI. En utilisant cette propriété, vous évitez la perte des informations qui peuvent être produites lors de l'appel du destructeur avant l'appel de la méthode UpdateFile.
Quand vous instanciez l'objet TIniFile
ou TMemIniFile
, il faut transmettre au constructeur un paramètre spécifiant le nom du fichier INI. Si le fichier n'existe pas déjà, il est créé automatiquement. Vous êtes alors libre de lire les valeurs en utilisant différentes méthodes de lecture, comme ReadString
, ReadDate
, ReadInteger
ou ReadBool
. Par ailleurs, si vous souhaitez lire une section entière du fichier INI, vous pouvez utiliser la méthode ReadSection
. De même, vous pouvez écrire des valeurs en utilisant WriteBool
, WriteInteger
, WriteDate
ou WriteString
.
L'exemple suivant lit des informations de configuration d'un fichier INI dans le gestionnaire d'événement OnCreate
d'une fiche et écrit des valeurs dans le gestionnaire d'événement OnClose
.
procedure TForm1.FormCreate(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
try
Top := Ini.ReadInteger( 'Form', 'Top', 100 );
Left := Ini.ReadInteger( 'Form', 'Left', 100 );
Caption := Ini.ReadString( 'Form', 'Caption', 'New Form' );
if Ini.ReadBool( 'Form', 'InitMax', false ) then
WindowState := wsMaximized
else
WindowState := wsNormal;
finally
Ini.Free;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action TCloseAction)
var
Ini: TIniFile;
begin
Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
try
Ini.WriteInteger( 'Form', 'Top', Top);
Ini.WriteInteger( 'Form', 'Left', Left);
Ini.WriteString( 'Form', 'Caption', Caption );
Ini.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );
finally
Ini.Free;
end;
end;
__fastcall TForm1::TForm1(TComponent *Owner) : TForm(Owner)
{
TIniFile *ini;
ini = new TIniFile( ChangeFileExt( Application->ExeName, ".INI" ) );
Top = ini->ReadInteger( "Form", "Top", 100 );
Left = ini->ReadInteger( "Form", "Left", 100 );
Caption = ini->ReadString ( "Form", "Caption", "Default Caption" );
ini->ReadBool( "Form", "initMax", false ) ?
WindowState = wsMaximized :
WindowState = wsNormal;
delete ini;
}
void __fastcall TForm1::FormClose)TObject *Sender, TCloseAction &Action)
{
TIniFile *ini;
ini = new TIniFile(ChangeFileExt( Application->ExeName, ".INI" ) );
ini->WriteInteger( "Form", "Top", Top );
ini->WriteInteger( "Form", "Left", Left );
ini->WriteString ( "Form", "Caption", Caption );
ini->WriteBool ( "Form", "InitMax", WindowState == wsMaximized );
delete ini;
}
Chacune des routines de lecture prend trois paramètres. Le premier identifie la section du fichier ini. Le deuxième paramètre identifie la valeur à lire et le troisième est une valeur par défaut à utiliser si la section ou la valeur n'existe pas dans le fichier ini. De même que les méthodes Read gèrent de manière élégante la non existence d'une section ou d'une valeur, les routines Write créent la section et/ou la valeur si elles n'existent pas. L'exemple précédent crée un fichier ini la première fois qu'il est exécuté, et ce fichier est de la forme :
[Form] Top=100 Left=100 Caption=Default Caption InitMax=0
Lors des exécutions ultérieures de cette application, les valeurs ini sont lues lors de la création de la fiche et réécrites dans l'événement OnClose
.