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.