Comment manipuler des fichiers INI à partir de Delphi

Les fichiers INI sont des fichiers texte utilisés pour stocker les données de configuration d'une application.

Même si les fenêtres recommande d'utiliser le Registre Windows pour stocker les données de configuration spécifiques à l'application, dans de nombreux cas, vous constaterez que les fichiers INI permettent au programme d'accéder plus rapidement à ses paramètres. Windows lui-même utilise même des fichiers INI; desktop.ini et boot.ini étant juste deux exemples.

Une utilisation simple des fichiers INI en tant que mécanisme d'enregistrement d'état serait d'enregistrer la taille et l'emplacement d'un formulaire si vous souhaitez qu'un formulaire réapparaisse à sa position précédente. Au lieu de chercher dans un tout base de données d'informations pour trouver la taille ou l'emplacement, un fichier INI est utilisé à la place.

Le format de fichier INI

Le fichier d'initialisation ou de paramètres de configuration (.INI) est un fichier texte avec une limite de 64 Ko divisé en sections, chacune contenant zéro ou plusieurs clés. Chaque clé contient zéro ou plusieurs valeurs.

instagram viewer

Voici un exemple:

 [Nom de la section]
keyname1 = valeur
;commentaire
keyname2 = valeur

Noms des sections sont placés entre crochets et doivent commencer au début d'une ligne. Les noms de section et de clé ne respectent pas la casse (la casse n'a pas d'importance) et ne peuvent pas contenir de caractères d'espacement. le nom clé est suivi d'un signe égal ("="), éventuellement entouré d'espaces, qui sont ignorés.

Si la même section apparaît plusieurs fois dans le même fichier ou si la même clé apparaît plusieurs fois dans la même section, la dernière occurrence prévaut.

Une clé peut contenir chaîne, entier ou booléenvaleur.​

Delphes IDE utilise le format de fichier INI dans de nombreux cas. Par exemple, Fichiers .DSK (paramètres du bureau) utilisent le format INI.

Classe TIniFile

Delphi fournit le TIniFile classe, déclarée dans le inifiles.pas unité, avec des méthodes pour stocker et récupérer des valeurs à partir de fichiers INI.

Avant de travailler avec les méthodes TIniFile, vous devez créer une instance de la classe:

les usages inifiles;
...
var
IniFile: TIniFile;
commencer
IniFile: = TIniFile. Créer ('myapp.ini');

Le code ci-dessus crée un objet IniFile et attribue 'myapp.ini' à la seule propriété de la classe - le Propriété FileName : Utilisé pour spécifier le nom du fichier INI à utiliser.

Le code tel qu'écrit ci-dessus recherche le myapp.ini fichier dans le \Les fenêtres annuaire. Une meilleure façon de stocker les données d'application est dans le dossier de l'application - il suffit de spécifier le chemin d'accès complet du fichier pour le Créer méthode:

// place l'INI dans le dossier de l'application,
// lui laisser le nom de l'application
// et 'ini' pour l'extension:

iniFile: = TIniFile. Créer (ChangeFileExt (Application. ExeName, '. Ini'));

Lecture de l'INI

La classe TIniFile a plusieurs méthodes de "lecture". Le ReadString lit un valeur de chaîne à partir d'une clé, ReadInteger. ReadFloat et similaires sont utilisés pour lire un nombre à partir d'une clé. Toutes les méthodes "en lecture" ont une valeur par défaut qui peut être utilisée si l'entrée n'existe pas.

Par exemple, le ReadString est déclaré comme:

une fonction ReadString (const Section, Ident, Default: String): String; passer outre;

Ecrire à INI

Le TIniFile a une méthode "écriture" correspondante pour chaque méthode "lecture". Ce sont WriteString, WriteBool, WriteInteger, etc.

Par exemple, si nous voulons qu'un programme se souvienne du nom de la dernière personne qui l'a utilisé, quand il l'a été, et quelles étaient les coordonnées du formulaire principal, nous pouvons créer une section appelée Utilisateurs, un mot clé appelé Dernier, Date pour suivre les informations, et une section intitulée Placement avec clés Haut, La gauche, Largeur, et la taille.

project1.ini
[Utilisateur]
Dernier = Zarko Gajic
Date = 29/01/2009
[Placement]
Haut = 20
Gauche = 35
Largeur = 500
Hauteur = 340

Notez que la clé nommée Dernier contient une valeur de chaîne, Date contient une valeur TDateTime, et toutes les clés du Placement section contient une valeur entière.

L'événement OnCreate du formulaire principal est l'endroit idéal pour stocker le code nécessaire pour accéder aux valeurs dans le fichier d'initialisation de l'application:

procédure TMainForm. FormCreate (expéditeur: TObject);
var
appINI: TIniFile;
LastUser: string;
LastDate: TDateTime;
commencer
appINI: = TIniFile. Créer (ChangeFileExt (Application. ExeName, '. Ini'));
essayer
// si aucun dernier utilisateur ne retourne une chaîne vide
LastUser: = appINI.ReadString ('User', 'Last', '');
// si aucune dernière date retour à la date du jour
LastDate: = appINI.ReadDate ('Utilisateur', 'Date', Date);
// affiche le message
ShowMessage ('Ce programme était précédemment utilisé par' + LastUser + 'on' + DateToStr (LastDate));
Top: = appINI.ReadInteger ('Placement', 'Top', Top);
Gauche: = appINI.ReadInteger ('Placement', 'Left', Left);
Width: = appINI.ReadInteger ('Placement', 'Width', Width);
Hauteur: = appINI.ReadInteger ('Placement', 'Height', Height);
enfin
appINI.Free;
fin;
fin;

L'événement OnClose du formulaire principal est idéal pour Enregistrer INI partie du projet.

procédure TMainForm. FormClose (Expéditeur: TObject; var Action: TCloseAction);
var
appINI: TIniFile;
commencer
appINI: = TIniFile. Créer (ChangeFileExt (Application. ExeName, '. Ini'));
essayer
appINI.WriteString ('Utilisateur', 'Dernier', 'Zarko Gajic');
appINI.WriteDate ('Utilisateur', 'Date', Date);
avec appINI, MainForm faire
commencer
WriteInteger ('Placement', 'Top', Top);
WriteInteger ('Placement', 'Left', Left);
WriteInteger ('Placement', 'Width', Width);
WriteInteger ('Placement', 'Height', Height);
fin;
enfin
appIni. Gratuit;
fin;
fin;

Sections INI

le EraseSection efface une section entière d'un fichier INI. ReadSection et ReadSections remplissez un objet TStringList avec les noms de toutes les sections (et les noms de clés) dans le fichier INI.

Limitations et inconvénients de l'INI

La classe TIniFile utilise l'API Windows ce qui impose une limite de 64 Ko sur les fichiers INI. Si vous devez stocker plus de 64 Ko de données, vous devez utiliser TMemIniFile.

Un autre problème peut survenir si vous avez une section avec une valeur supérieure à 8 K. Une façon de résoudre le problème consiste à écrire votre propre version de la méthode ReadSection.

instagram story viewer