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
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Ottimizzazione dei block template in Angular 17
Le novità di Angular: i miglioramenti alla CLI
Paginare i risultati con QuickGrid in Blazor
Generare una User Delegation SAS in .NET per Azure Blob Storage
Utilizzare Azure Cosmos DB con i vettori
Miglioramenti nell'accessibilità con Angular CDK
Triggerare una pipeline su un altro repository di Azure DevOps
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Creare una custom property in GitHub
Simulare Azure Cosmos DB in locale con Docker
Creare una libreria CSS universale: Immagini