IsolatedStorageFile !

Vous développez en Silverlight ? Vous avez envie de développer mais vous vous demandez comment enregistrer des données pour un utilisateur sur un ordinateur a la "cookie" mode en ASP.NET ? L'IsolatedStorageFile est la pour vous ! Il vous permet par exemple d'enregistrer des valeurs d'une textbox dans un fichier et de le récupérer après avoir fermé l'application en retournant dessus 10 jours après !.

La démonstration ici est simple. On enregistre le texte contenu dans une TextBox. A chaque fois que l'on clique sur le bouton "Enregistrer les données", on efface tout le texte. On vérifie en fermant l'application et en la relancant puis en appuyant sur "Charger les données" que le texte revient ! Mais comment cela fonctione-t-il ? Chaque application a son "espace" stocké quelques part sur le disque. Il est possible d'y enregistrer plusieurs fichiers... Il est également possble d'augmenter la taille 'Quota' alloué, ...

Voici le code XAML de la page Silverlight !

<UserControl x:Class="IsoStorageSilverlight.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="5*"/>
            <RowDefinition Height="1*"/>
            <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>
        <TextBox Grid.Row="0" Name="grille"/>
        <Button Grid.Row="1" Name="charger" Click="Charger_Click"  Content="Charger les données"/>
        <Button Grid.Row="2" Name="enregistrer" Click="Enregistrer_Click" Content="Enregistrer les données"/>
    </Grid>
</UserControl>

Voici le code C# de cette même page !

public partial class MainPage : UserControl
{
    private const string FILENAME = "fichier.txt";
 
    public MainPage()
    {
        InitializeComponent();
    }
 
    private void Enregistrer_Click(object sender, RoutedEventArgs e)
    {
        // On récupère le "store" pour cette application
        using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
        {
            // On vérifie si le fichier existe
            // Si oui on l'efface
            if (store.FileExists(FILENAME))
                store.DeleteFile(FILENAME);
 
            // On crée un nouveau fichier et on copie le contenu de la textbox
            using (FileStream stream = store.CreateFile(FILENAME))
            {
                StreamWriter writer = new StreamWriter(stream);
                writer.Write(grille.Text);
                writer.Flush();
            }
            // On reset la textbox !
            grille.Text = string.Empty;
        }
    }
 
    private void Charger_Click(object sender, RoutedEventArgs e)
    {
        // On récupère le "store" pour cette application
        using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
        {
            // Si le fichier existe, on le récupère
            if (store.FileExists(FILENAME))
                using (FileStream stream = store.OpenFile(FILENAME, FileMode.Open, FileAccess.Read))
                {
                    // On va le lire et positionner la propriété Text de la textbox
                    // avec le contenu de la grille !
                    StreamReader reader = new StreamReader(stream);
                    grille.Text = reader.ReadToEnd();
                }
        }
    }
}

Pour plus d'informations, je vous conseille la MSDN en cliquant ici.

Commentaires

1. Le mardi, juillet 7 2009, 23:41 par Renaud Laloire

Ne pas oublier cependant que l'acces a cet espace memoire (dont la taille est definie par l'application, donc par le developpeur) doit etre au prealable demande a l'utilisateur (client side) via une petite boite popup automatisee sans quoi rien ne pourra se faire.

Renaud

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet

Page top