Sauvegarder les paramètres utilisateurs

Les applications peuvent avoir besoin de stocker des informations sur elles mêmes. Ces informations peuvent etre stockées dans une base de données ou encore des fichiers. Dans ce dernier cas, cela peut poser des problemes de sécurité suivant la strategie 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 developpeur et les besoins de l'administrateur.

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Share on Google+ 

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 ou 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 droit pour sauvegarder ces informations sur le disque.

II. La classe IsolatedStorageFile

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.

B. Propriétés

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

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.

A. Niveau Utilisateur

 
Sélectionnez

IsolatedStorageFile aStorage = IsolatedStorageFile.GetUserStoreForAssembly();

B. Niveau Application

 
Sélectionnez

IsolatedStorageFile aStorage = IsolatedStorageFile.GetMachineStoreForAssembly();

IV. Ecrire et lire des informations dans l'espace de stockage

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.

 
Sélectionnez

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.

B. Ecrire 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.

 
Sélectionnez

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 ou 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).

C. Lire dans l'espace de stockage

Avant de lire votre fichier contenant vos informations, vous devez vérifier que celui-ci existe. Bien sur 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 :

 
Sélectionnez

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 :

 
Sélectionnez

[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 mets à 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épertoire dans cet espace de stockage afin de structurer la sauvegarde de vos données.

VI. Téléchargement

Cet article est disponible au format PDF

  

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.