Gestion de données de configuration

Expression du besoin

La plupart des applications ont besoin de conserver des données propres à leur configuration et à leur fonctionnement (des préférences comme la taille et la position de la fenêtre ou des paramètres de fonctionnement comme l’adresse IP et le numéro de port d’un serveur, …).

Pour ce type de fichier, les contraintes sont :

  • d’être consultable et éditable en dehors de l’application
  • d’avoir une structure simple, lisible et extensible
  • de possèder un format ouvert

Parmi les formats les plus répandus, on trouve les fichiers INI.

Remarque : de plus en plus de logiciels utilisent le format XML (Extensible Markup Language) pour le format et l’échange de données (voir l’activité sur les fichiers XML).

Fichier INI

Un fichier INI est un fichier de configuration dans un format de données introduit par les systèmes d’exploitation Windows en 1985. Par convention les noms de ces fichiers portent l’extension « .ini ».

L’utilisation de ce format de fichier s’est tout d’abord répandue parmi les logiciels qui fonctionnent sur Windows, puis plus tard sur des logiciels fonctionnant sur d’autres systèmes d’exploitation, tels que ceux de la famille Unix. Depuis l’apparition de la base de registre, Microsoft a beaucoup diminué l’utilisation de ce format pour ses propres logiciels.

Les fichiers INI sont des fichiers texte : ils peuvent donc être manipulés avec un éditeur de texte. Les fichiers sont divisés en sections. Chaque section comporte un certain nombre de paramètres de configuration. Chaque section commence par un titre placé entre crochets « [ » et « ] ».

La valeur de chaque paramètre de configuration est indiquée par une formule : paramètre = valeur. Les fichiers peuvent contenir des commentaires. Les commentaires sont souvent utilisés pour décrire les paramètres et les valeurs à introduire. Ils sont précédés d’un point-virgule (;) ou plus rarement d’un dièse (#).

Exemple de fichier INI :

; Last modified 15 July 2010 by Juan Dona
[owner]
name=juan dona
organization=cablage ideal

[database]
server=192.0.2.42 ; use IP address in case network name resolution is not working
port=143
file = "acme payroll.dat"

API Qt

Qt fournit la classe QSettings pour manipler les fichiers INI :

Objectifs

Être capable de lire et écrire dans un fichier INI des données de configuration.

Séquence 1 : lire un fichier INI

On va créer une application GUI simple qui a besoin de données de connexion composée du couple adresse IP/numéro de port :

Ces données seront conservées dans le fichier INI fourni ci-dessous et qui portera le même nom que l’exécutable et sera situé dans le même dossier que celui-ci :

[connexion]
adresse="192.168.52.1"
port=80

Pour manipuler ces données dans le programme, on définira cette structure de données :

typedef struct
{
    QString adresseIP;
    int     port;
} CONNEXION;

L’objectif est de lire ce fichier INI à la construction de la fenêtre pour initialiser l’affichage avec les données présentes. Puis, d’y écrire les données modifiées à la destruction de la fenêtre.

On vous fournit la méthode lireINI() qu’il vous faudra tester :

bool MaFenetre::lireINI()
{
  // Le nom du fichier INI : nom-executable.ini
  QString fichierINI = qApp->applicationName() + ".ini";

  if(estFichier(fichierINI))
  {
    QSettings parametres(fichierINI, QSettings::IniFormat);

    // Lecture des paramètres de configuration
    connexion.adresseIP=parametres.value("connexion/adresse","127.0.0.1").toString();
    connexion.port=parametres.value("connexion/port", "0").toInt();

    // Affichage de débugage
    qDebug()<<QString::fromUtf8("adresse ip : %1").arg(connexion.adresseIP);
    qDebug()<<QString::fromUtf8("port : %1").arg(connexion.port);

    return true;
  }
  else
  {
    QMessageBox::critical(0,"Erreur !",("Impossible d'ouvrir le fichier " 
                                        + fichierINI));
    return false;
  }
}

Code source fourni : activite-fichier-ini.zip

  1. Tester l’application fournie :
  1. avec les données fournies puis, en les modifiant pour valider leur lecture
  2. avec des données manquantes (les mettre en commentaire) pour vérifier la prise en compte des valeurs par défaut
  3. avec les données fournies mais, en retirant les droits d’accès au fichier (puis en le renommant) pour vérifier l’affichage de la boîte dialogue d’erreur

Séquence 2 : écrire dans un fichier INI

  1. Écrire la méthode ecrireINI() et tester l’enregistrement des données à la fermeture.

Retour au sommaire