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
Assegnare un valore di default a un parametro di una lambda in C#
Evitare la command injection in un workflow di GitHub
Le novità di Angular: i miglioramenti alla CLI
Gestire liste di tipi semplici con Entity Framework Core
Creare gruppi di client per Event Grid MQTT
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Utilizzare il trigger SQL con le Azure Function
Eseguire operazioni con timeout in React
Eseguire attività con Azure Container Jobs
Specificare il versioning nel path degli URL in ASP.NET Web API
Gestione degli environment per il deploy con un workflow di GitHub
Creare alias per tipi generici e tuple in C#