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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Raggruppare risorse in .NET Aspire
Esporre un server MCP esistente con Azure API Management
Gestire trasferimenti cloud con Azure Storage Mover
Esporre un server MCP con Azure API Management
Supporto nativo a JSON in SQL Server 2025
Integrare OpenAI tramite Aspire
Raggruppamento degli aggiornamenti di dipendenze tra directory in un monorepo con Dependabot
Centralizzare e governare MCP server e Skill con Azure API Center
Utilizzare il top layer in HTML
Il nuovo persistent state in Blazor
Avviare rapidamente un container con Azure Container Apps Express
Usare il metodo nameof con un tipo generico in C# 14


