Sauvegarder les paramètres utilisateur

Frederic Cantenot

Les applications peuvent avoir besoin de stocker des informations sur elles-mêmes. Ces informations peuvent être stockées dans une base de données ou encore des fichiers. Dans ce dernier cas, cela peut poser des problèmes de sécurité suivant la stratégie de sécurité mise en place par l'administrateur système. Heureusement le Framework .NET dispose de l'espace de nom System.IO.IsolatedStorage qui permet de faire le lien entre les besoins du développeur et les besoins de l'administrateur.

N'hésitez pas à commenter cet article ! Commentez ♪

- Titre : Sauvegarder les paramètres utilisateur

- Auteur : Frederic Cantenot

- Parution : 30 septembre 2006

- Licence : 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 ® 2006 Freddyboy. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. La classe IsolatedStorageFile

- II-A. Méthodes statiques

- II-B. Propriétés

- II-C. Méthodes

- III. Création d'un espace de stockage

- III-A. Niveau utilisateur

- III-B. Niveau Application

- IV. Écrire et lire des informations dans l'espace de stockage

- IV-A. La classe IsolatedStorageFileStream

- IV-B. Écrire dans l'espace de stockage

- IV-C. Lire dans l'espace de stockage

- V. Permission pour que l'assembly utilise IsolatedStorage

- VI. Conclusion

I - Introduction

Les applications en général ont besoin (mais pas toujours) de stocker des informations les concernant. Il arrive également que votre application ait besoin de stocker des informations propres à chaque utilisateur local de l'ordinateur sur lequel s'exécute l'application. Il y a plusieurs façons de sauvegarder ces informations, base de données, fichiers, etc. Dans le cas où vous choisissez de sauvegarder ces informations dans un fichier, cela peut poser des problèmes selon la configuration du système sur lequel s'exécute l'application. Par exemple l'administrateur système peut avoir mis en place une stratégie de sécurité qui empêchera l'application de créer le fichier dans le répertoire que vous aurez voulu. Le Framework .NET 2.0 utilise le concept d'Isolated Storage pour résoudre ce problème. Cela permet de stocker des informations sur l'application sans se soucier de savoir si vous avez assez de droits pour sauvegarder ces informations sur le disque.

II - La classe IsolatedStorageFile

II-A - Méthodes statiques

Cette classe fournit des méthodes statiques qui permettent de créer un objet IsolatedStorageFile. Je ne vais pas détailler toutes les méthodes, mais juste celles qui sont les plus intéressantes dans notre cas de figure. Cette classe se trouve dans l'espace de nommage System.IO.IsolatedStorage.

Nom

Definition

GetMachineStoreForAssembly

Permet d'obtenir un IsolatedStorageFile qui permettra de sauvegarder des informations sur l'application. Ces informations seront communes à tous les utilisateurs qui vont exécuter l'application.

GetUserStoreForAssembly

Permet d'obtenir un IsolatedStorageFile qui permettra de sauvegarder des informations propres à chaque personne ayant un compte sur l'ordinateur et qui utilisera l'application sur cet ordinateur.

II-B - Propriétés

Nom

Definition

CurrentSize

Taille courante des informations qui se trouvent dans l'IsolatedStorage.

II-C - Méthodes

Nom

Definition

Close

Ferme une instance d'IsolatedStorage

CreateDirectory

Créer un répertoire dans l'espace de stockage

DeleteDirectory

Supprime un répertoire dans l'espace de stockage

DeleteFile

Supprime un fichier dans l'espace de stockage

GetDirectoryName

Récupère le nom des répertoires dans l'espace de stockage

GetFilesNames

Récupère le nom des fichiers dans l'espace de stockage

Remove

Supprime tout le contenu de l'espace de stockage

III - Création d'un espace de stockage

Avant de créer un IsolatedStorage il faut vous demander si vous voulez stocker des informations propres à chaque utilisateur donc au niveau utilisateur ou juste des informations concernant l'application donc au niveau application.

III-A - Niveau utilisateur

IsolatedStorageFile aStorage = IsolatedStorageFile.GetUserStoreForAssembly();

III-B - Niveau Application

IsolatedStorageFile aStorage = IsolatedStorageFile.GetMachineStoreForAssembly();

IV - Écrire et lire des informations dans l'espace de stockage

IV-A - La classe IsolatedStorageFileStream

Cette classe encapsule un stream qui est utilisé pour créer des fichiers dans l'espace de stockage. Comme cette classe encapsule un stream, elle hérite de FileStream, donc elle en reprend les propriétés et les méthodes. Je vous laisse consulter l'aide pour voir les propriétés et les méthodes de cette classe.

Je vous donne simplement les paramètres du constructeur que nous allons utiliser.

public IsolatedStorageFileStream (string path, FileMode mode, IsolatedStorageFile isf);

* path : contient le nom du fichier dans lequel les informations seront stockées ;
* mode : indique comment le système d'exploitation doit ouvrir le fichier ;
* isf : l'IsolatedStorageFile que nous aurons créé dans la section III.

IV-B - Écrire dans l'espace de stockage

Nous allons partir du principe que nous voulons écrire des informations au format texte dans l'espace de stockage. Pour cela le Framework .NET propose la classe StreamWriter.

IsolatedStorageFile aStorage = IsolatedStorageFile.GetUserStoreForAssembly();
IsolatedStorageFileStream aStream = new IsolatedStorageFileStream("settings.set", FileMode.Create, aStorage);
StreamWriter aWriter = new StreamWriter(aStream);
aWriter.WriteLine("mon information");
aWriter.Close();
aStream.Close();
aStorage.Close();

Normalement à cette étape votre fichier est créé et vous pouvez l'éditer avec Notepad. Seulement vous ne savez pas où il se trouve. En fait c'est le Framwork .NET qui a géré le chemin du fichier pour vous. Sur mon portable, le fichier settings.set se trouve ici : C:\Documents and Settings\freddyboy\Local Settings\Application Data\IsolatedStorage\qdmnekba.1gd\0t1frkgh.trp\Url.ujetw4uvzpibfe0c51q2ofkpotvhnvkk\AssemFiles\settings.set

Bien sur le chemin sur votre ordinateur ne sera pas le même. Vous pouvez faire une recherche pour le trouver (attention il faut activer la recherche dans les fichiers et les dossiers cachés).

IV-C - Lire dans l'espace de stockage

Avant de lire votre fichier contenant vos informations, vous devez vérifier que celui-ci existe. Bien sûr vous pensez tout de suite à la méthode File.Exists(). Cependant cette méthode ne peut pas être utilisée ici. Il faut que vous utilisiez la méthode GetFileNames() de la classe IsolatedStorageFile. Ensuite il suffit d'utiliser un StreamReader pour lire le contenu du fichier.

Exemple :

string[] files = aStorage.GetFileNames("settings.set");
if (files.Length != 0)
{
// lire le fichier
IsolatedStorageFileStream userStreamReader = new IsolatedStorageFileStream("settings.set", FileMode.Open, aStorage);
StreamReader userReader = new StreamReader(userStreamReader);
Console.WriteLine(userReader.ReadLine());
userReader.Close();
}
else
{
// Pas de données pour cet utilisateur
}

Si tout c'est bien passé, la console doit afficher évidemment mon information.
Comme vous le constatez, pas besoin de spécifier le chemin du fichier, le framework fait le nécessaire pour vous.

V - Permission pour que l'assembly utilise IsolatedStorage

Afin de ne pas avoir de problème, il est préférable de faire la demande de permission afin de pouvoir utiliser IsolatedStorage. Pour cela vous avez la classe IsolatedStorageFilePersmission.

Vous pouvez l'utiliser comme ceci :

[System.Security.Permissions.IsolatedStorageFilePermission(SecurityAction.Demand)]
class Program
{
}

L'ajout de cette ligne de code permet de s'assurer que l'assembly a les permissions pour utiliser l'IsolatedStorage. Dans le cas contraire, l'erreur générée devrait permettre à l'administrateur de comprendre que cette assembly a besoin des droits et de faire le nécessaire.

VI - Conclusion

Comme vous avez pu le voir, le framework .NET met à notre disposition un moyen simple et élégant pour gérer les informations propres à l'application de manière persistante, et ceci en quelques lignes de code. L'espace de nom IsolatedStorage propose aussi la création de répertoires dans cet espace de stockage afin de structurer la sauvegarde de vos données.