Salvare i dati nello storage locale con il .NET Framework, Silverlight e Windows Phone

di Cristian Civera, in .NET Framework,

In ogni applicazione che si rispetti, persistere i dati e le impostazioni è un requisito minimo che permette un utilizzo nel tempo dell'applicazione. Per compiere questo compito solitamente vengono sfruttati i file che in ambiente ASP.NET (server) o Windows (client) permettono di salvare qualsiasi informazione in formato binario, serializzando eventualmente gli oggetti.

In ambienti più limitati, come in Silverlight e Windows Phone, per ragioni di sicurezza non è concesso utilizzare liberamente le classi di System.IO, perché sostanzialmente non è possibile scrivere sul disco del PC o sullo storage del device. In realtà, anche nelle applicazioni Windows non è consentito scrivere in tutti i percorsi e spesso è stato, ed è, causa di malfunzionamenti di applicazioni che tentano di scrivere senza i requisiti necessari, pretendendo di funzionare con privilegi di amministratore.

Per risolvere questo problema e scaricare il problema della sicurezza, sin dal .NET Framework 1.0 sono presenti alcune classi, contenute nel namespace System.IO.IsolatedStorage, che permettono di identificare uno storage virtuale, dove è possibile leggere, scrivere file o gestire directory. La particolarità sta nel fatto che questo storage virtuale, sebbene poi fisicamente scriva sul file system del sistema, è completamente isolato a seconda del contesto in cui vive, garantendo la sicurezza e la tranquillità di accesso al suo contenuto.

Principi di IsolatedStorage

Il suo utilizzo è piuttosto semplice, perché molto simile alla normale creazione dei file, ma differisce solo dal modo in cui si ottiene lo Stream per la scrittura. Prima di tutto è necessario creare lo storage partendo dallo scopo che si vuole ottenere: a seconda dell'ambiente (WinForm, ASP.NET, Silverlight e Windows Phone) la classe IsolatedStorageFile dispone di metodi statici come GetUserStoreForApplication o GetUserStoreForSite (in WinForm si ha anche per dominio, per assembly, per utente o per macchina) che restituiscono un'istanza della classe stessa.

// Ottengo lo storage per l'applicazione
using (IsolatedStorageFile storage = 
                    IsolatedStorageFile.GetUserStoreForApplication())
{
  // Operazioni sullo storage...
}

Accesso al file system

Con la classe IsolatedStorageFile è possibile operare come se fosse un file system, con una serie di metodi come CreateDirectory, CreateFile, GetFileNames, MoveFile e tanti altri. Nell'esempio seguente si crea una cartella e si utilizza CreateFile per ottenere uno IsolatedStorageFileStream (una specializzazione di Stream) che permette di scrivere nel file attraverso gli strumenti standard di manipolazione dello Stream (StreamWriter, StreamReader, BinaryReader, BinaryWriter ecc).

// Creo una cartella
if (!storage.DirectoryExists("mydir"))
    storage.CreateDirectory("mydir");

// Creo il file (sovrascrivo se esiste)
using (IsolatedStorageFileStream stream = storage.CreateFile("mydir\\test.txt"))
{
    // Scrivo nello Stream
    byte[] data = Encoding.Unicode.GetBytes("Ciao mondo!");
    stream.Write(data, 0, data.Length);
}

Grazie a questo storage l'utente ha la garanzia della sicurezza delle informazioni, perché in ambienti come Silverlight è possibile controllarlo e svuotarlo. In Windows Phone, ad esempio, viene cancellato con la rimozione dell'applicazione.
Occorre precisare che lo spazio non è infinito, ma esiste una quota iniziale (di 1 MB su Silverlight, 50 MB su Silverlight se l'applicazione viene installata, 2 GB su Windows Phone) che è possibile conoscere con la proprietà Quota, così come aumentare con il metodo IncreaseQuotaTo.

Infine, sebbene non esistano strumenti ufficiali su Silverlight e Windows Phone che permettano di avere un motore relazionale, esistono soluzioni di terze parti che forniscono motori relazionali basati sull'isolated storage. La persistenza dei dati binaria, infatti, permette di gestire liberamente il modo in cui un layer sovrastante possa leggere e scrivere i byte.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi