Nello script 6 (https://www.winrtitalia.com/script/6/Accedere-Risorse-Immagini-Windows-Store-App-Windows.aspx) abbiamo visto che le Windows Store app hanno a disposizione tre tipologie di cartelle in cui memorizzare file e informazioni: LocalFolder, TemporaryFolder e RoamingFolder.
In WinRT leggere e scrivere file in queste cartelle può essere fatto attraverso Windows.Storage.ApplicationData.Current e una delle tre proprietà sopra citate, di tipo StorageFolder.
In tali cartelle, ad esempio, possiamo persistere lo stato di alcuni oggetti attraverso la serializzazione ed il loro salvataggio in file XML.
Con l'esempio seguente andiamo a serializzare e scrivere il file data.xml in LocalFolder.
string fileName = "data.xml"; var myObj = new MyObject() { Id = 1, Name = "Name1", Description = "Description1" }; StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFile localFile = await localFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); IRandomAccessStream fileRandomAccess = await localFile.OpenAsync(FileAccessMode.ReadWrite); IOutputStream fileOutputStream = fileRandomAccess.GetOutputStreamAt(0); var fileSerializer = new DataContractSerializer(typeof(MyObject)); fileSerializer.WriteObject(fileOutputStream.AsStreamForWrite(), myObj); await fileOutputStream.FlushAsync();
Nel codice seguente vediamo come leggere il file salvato e ricostruire l'oggetto descritto al suo interno.
string fileName = "data.xml"; StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFile localFile2 = await localFolder.GetFileAsync(fileName); var fileSerializer = new DataContractSerializer(typeof(MyObject)); IInputStream fileInputStream = await localFile2.OpenReadAsync(); var obj = (MyObject)fileSerializer.ReadObject(fileInputStream.AsStreamForRead());
Se andiamo a controllare dove il file viene effettivamente salvato sul file system:

possiamo notare come questo sia contenuto in una cartella il cui nome corrisponde al package family name, verificabile nel file di manifest Package.appxmanifest.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Change tracking e composition in Entity Framework
Gestione dell'annidamento delle regole dei layer in CSS
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Creare una libreria CSS universale: Nav menu
Introduzione alle Container Queries
Cambiare la chiave di partizionamento di Azure Cosmos DB
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Generare velocemente pagine CRUD in Blazor con QuickGrid
Ordine e importanza per @layer in CSS