Lavorare con lo storage isolato su Windows Phone 8

La memorizzazione isolata viene utilizzata per memorizzare dati locali su un Windows Phone. È "isolato" perché altre applicazioni non possono accedere a questi dati. In questo tutorial avrai una panoramica dello storage isolato e imparerai come utilizzarlo per archiviare i dati in modo più sicuro su Windows Phone 8.

L'architettura mobile dell'archiviazione isolata è simile alle applicazioni basate su Silverlight su Windows. Tutte le operazioni di I / O sono limitate all'archiviazione isolata e non hanno accesso diretto al file system del sistema operativo sottostante, il che aiuta a fornire sicurezza e impedisce l'accesso non autorizzato e il danneggiamento dei dati da altre app. Se si desidera condividere i dati tra due applicazioni, è necessario un tipo di servizio basato su cloud che possa condividere tali dati per conto dell'utente. 

La cartella locale è la cartella principale dell'archivio dati della tua app. Esistono due modi per memorizzare i dati localmente. Il primo modo è attraverso una raccolta di coppie nome / valore chiamate IsolatedStorageSettings. L'altro modo è attraverso la creazione di file e cartelle reali chiamati IsolatedStorageFile. Ecco alcune cose che vale la pena ricordare sullo storage isolato:

  • Lo spazio di archiviazione isolato utilizza le quote di autorizzazione, che sono i limiti di archiviazione impostati da IsolatedStoragePermission oggetti.
  • Se provi a scrivere dati che superano la quota, a IsolatedStorageException l'eccezione è lanciata.
  • IsolatedStorageFilePermission decide se concedere l'autorizzazione al file o alla directory. 

1. Schemi URI

Utilizzare il isostore o ms-appdata Nomi dello schema URI quando si indirizza la cartella locale in un percorso. Entrambi questi schemi URI consentono di accedere alla cartella locale, ma non possono essere utilizzati in modo intercambiabile. ms-appdata è usato per indirizzare la radice della cartella locale con le API, mentre isostore è usato per indirizzare la radice della cartella locale. Il seguente esempio lo dimostra. 

// Crea un database locale nella cartella locale con lo schema URI isostore. MyDataContext db = new MyDataContext ("isostore: /mydb.sdf"); // Ottieni un file dalla cartella locale con lo schema URI ms-appdata. var file = attendi Windows.StorageFile.GetFileFromApplicationUriAsync (nuovo Uri ("ms-appdata: ///local/AppConfigSettings.xml"));

ms-appdata richiede tre barre (///) e isostore richiede solo una barra (/). La lunghezza totale del percorso per uno dei due schemi URI non può superare i 185 caratteri.

2. IsolatedStorageSettings

Il modo più semplice per mettere i dati in una memoria isolata è usare il IsolatedStorageSettings classe, che è a Dizionario che memorizza le coppie chiave-valore nello spazio di archiviazione isolato. IsolatedStorageSettings viene in genere utilizzato per salvare le impostazioni, ad esempio il numero di immagini da visualizzare per pagina, le opzioni di layout di pagina e così via. I dati salvati in IsolatedStorageSettings persiste attraverso i lanci delle applicazioni.

Se si desidera solo memorizzare le informazioni sulle impostazioni come Username = "Fred", allora puoi usare il Impostazioni dell'applicazione oggetto nella memoria isolata. Viene utilizzato nello stesso modo in cui si usa un dizionario. Il SaveString metodo può essere usato per salvare un valore di stringa Messaggio per la chiave nome.

void saveString (messaggio stringa, nome stringa) IsolatedStorageSettings.ApplicationSettings [nome] = messaggio; IsolatedStorageSettings.ApplicationSettings.Save (); 

Lo storage funziona come un dizionario, ma ricorda di chiamare Salvare quando hai finito di aggiungere le chiavi.

Per recuperare i valori dalle impostazioni, è possibile utilizzare loadString metodo che prende la chiave delle impostazioni salvate come parametro e restituisce il valore se la chiave esiste.

string loadString (nome stringa) if (IsolatedStorageSettings.ApplicationSettings.Contains (name)) return (string) IsolatedStorageSettings.ApplicationSettings [nome];  else return null;  

Verifica se la chiave esiste prima di provare a trovarla. Se stai cercando di ottenere il valore per una chiave che non esiste, verrà generata un'eccezione.

Una buona pratica è creare una classe statica speciale, che contenga le impostazioni dell'applicazione. Ciò semplifica l'accesso a qualsiasi proprietà nella tua applicazione in qualsiasi momento.

Se stai lavorando a un progetto di app di Windows universale, quindi utilizza IsolatedStorageSettings.ApplicationSettings darà un errore di sintassi. Devi sostituirlo con Windows.Storage.ApplicationData.Current.LocalSettings.

3. IsolatedStorageFile

IsolatedStorageFile è il meccanismo che è possibile utilizzare per memorizzare i file sul dispositivo dell'utente. È possibile eseguire varie operazioni sull'archivio isolato, ad esempio creare cartelle e file, scrivere su un file, leggere dati, rimuovere file, ecc.

Questi file e cartelle non sono accessibili ad altre applicazioni installate sul dispositivo dell'utente. Il IsolatedStorageFileStream la classe è usata per leggere, scrivere e creare file nella memoria isolata. Questa classe si estende FileStream, il che significa che puoi usare un'istanza di IsolatedStorageFileStream nella maggior parte delle situazioni in cui a FileStream altrimenti potrebbe essere usata l'istanza, ad esempio per costruire a StreamReader o StreamWriter.

Scrivere su un file 

Il seguente frammento di codice mostra come scrivere su un file in una memoria isolata. Il saveGameToIsolatedStorage la funzione crea un nuovo file nella memoria isolata e salva la stringa Messaggio dentro.

private void saveGameToIsolatedStorage (string message) using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication ()) using (IsolatedStorageFileStream rawStream = isf.CreateFile ("MyFile.store")) StreamWriter writer = new StreamWriter (rawStream); writer.WriteLine (messaggio); // salva il messaggio writer.Close ();  

Lettura da un file

Il loadString la funzione legge e restituisce il testo contenuto nel file. La funzione utilizza Il file esiste per prima cosa controlla se il file esiste nella memoria isolata. Quindi utilizza un'istanza di StreamReader leggere il file.

private string loadString () string result = null; using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication ()) if (isf.FileExists ("Myfile.store") using (IsolatedStorageFileStream rawStream = isf.OpenFile (filename, System.IO.FileMode.Open)) StreamReader reader = new StreamReader (rawStream); result = reader.ReadLine (); reader.Close (); restituisce risultato; 

Lo spazio di archiviazione isolato non è disponibile per le app di Windows Store. Invece, utilizzare le classi di dati dell'applicazione in Windows.Storage spazi dei nomi inclusi nell'API di Windows Runtime per memorizzare dati e file locali.

Si consiglia di eliminare le istanze di IsolatedStorageFileIsolatedStorageFileStream quando non sono più necessari Il utilizzando la dichiarazione lo fa automaticamente per te e il suo utilizzo è considerato una buona pratica.

Scrivere su un file esistente

Per sovrascrivere il contenuto di un file esistente, utilizzare un'istanza di StreamWriter classe per aprire il file. I parametri FileMode.OpenFileAccess.Write vengono passati per aprire il file con accesso in scrittura. Ciò sovrascriverà il contenuto esistente con nuovi dati.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication (); if (myIsolatedStorage.FileExists (filename)) using (StreamWriter writeFile = new StreamWriter (new IsolatedStorageFileStream (filename, FileMode.Open, FileAccess.Write, myIsolatedStorage))) string someTextData = "Impara a codificare utilizzando Tuts +"; writeFile.WriteLine (someTextData); writeFile.Close (); 

Aggiunta a un file esistente

L'aggiunta di dati a un file esistente è molto simile alla scrittura di dati su un file esistente. L'unica modifica necessaria è l'impostazione della modalità file su FileMode.APPEND.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication (); if (myIsolatedStorage.FileExists (filename)) if (myIsolatedStorage.FileExists (filename)) using (StreamWriter writeFile = new StreamWriter (new IsolatedStorageFileStream (filename, FileMode.Append, FileAccess.Write, myIsolatedStorage))) string someTextData = " Usa Tuts + per imparare le abilità creative, modella il tuo futuro "; writeFile.WriteLine (someTextData); writeFile.Close ();  

Eliminazione di un file di testo

Per eliminare un file di testo, per prima cosa controlliamo se il file di testo esiste in una memoria isolata e poi lo usiamo Cancella il file per cancellare il file.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication (); if (myIsolatedStorage.FileExists (filename)) myIsolatedStorage.DeleteFile (filename); 

Vi incoraggio ad esplorare l'applicazione di esempio di questo tutorial per vedere come leggere, scrivere e aggiungere dati a un file.

4. Explorer di archiviazione isolato

Durante il debug di un'applicazione, potrebbe essere necessario controllare i file e le cartelle salvate nella memoria isolata della tua app per verificare che i file corretti siano stati salvati nella posizione corretta. Emulatori e dispositivi che eseguono Windows Phone 8 o versioni precedenti possono utilizzare Windows Phone Power Tools, uno strumento basato sulla GUI per l'accesso all'archiviazione isolata delle app.

Un'altra opzione sta usando il Explorer di archiviazione isolato ISETool, uno strumento da riga di comando installato insieme a Windows Phone SDK. È possibile utilizzare ISETool per elencare, copiare e sostituire file e directory nella cartella locale dell'app.

ISETool può essere utilizzato con qualsiasi dispositivo o emulatore e viene generalmente installato nel seguente percorso:

Programmi (x86) \ MicrosoftSDKs \ WindowsPhone \ v8.0 \ Tools \ IsolatedStorageExplorerTool

Ecco alcune cose che vale la pena notare durante l'utilizzo di ISETool:

  • L'app deve essere installata sull'emulatore o sul dispositivo.
  • L'emulatore o il dispositivo devono essere sbloccati, ma l'app non deve essere in esecuzione.
  • Non è possibile accedere allo spazio di archiviazione isolato delle app installate da Windows Phone Store.
  • Non è possibile visualizzare le impostazioni memorizzate utilizzando IsolatedStorageSettings classe usando ISETool.

Per utilizzare ISETool, è necessario utilizzare la seguente sintassi:

ISETool.exe    []

Ecco un paio di cose che possono essere fatte usando ISETool.

Copia di file dallo spazio di archiviazione isolato al computer

  1. Distribuire l'app che si desidera testare sull'emulatore o su un dispositivo e creare file e directory locali. 
  2. Ottieni l'ID app dal Codice prodotto attributo dell'elemento app in WMAppManifest.xml file.
  3. Navigare verso ISETool.exe utilizzando il prompt dei comandi ed esegui il seguente comando per copiare tutti i file dalla memoria isolata dell'app sul tuo computer.
ISETool.exe ts xd f8ce6878-0aeb-497f-bcf4-65be961d4bba c: \ data \ myfiles

Sostituzione dei file nella memoria isolata

Ripeti i tre passaggi precedenti e utilizza il seguente comando per sostituire i file nella memoria isolata dell'app.

ISETool.exe rs xd f8ce6878-0aeb-497f-bcf4-65be961d4bba "C: \ Data \ My Files"

Se vuoi saperne di più su ISETool, ti suggerisco di leggere un altro articolo che ho scritto sull'uso di ISETool.

Conclusione

Abbiamo due semplici meccanismi disponibili su Windows Phone, IsolatedStorageSettings e IsolatedStorageFile. La memoria isolata rappresenta un'area di archiviazione contenente file e directory a cui non è possibile accedere da altre applicazioni. L'archiviazione isolata è utile in molte situazioni. Sentiti libero di scaricare i file sorgente del tutorial da usare come riferimento.