Werken met geïsoleerde opslag op Windows Phone 8

Geïsoleerde opslag wordt gebruikt om lokale gegevens op een Windows Phone op te slaan. Het is "geïsoleerd" omdat andere applicaties geen toegang hebben tot deze gegevens. In deze tutorial krijgt u een overzicht van geïsoleerde opslag en leert u hoe u deze kunt gebruiken om gegevens veiliger op te slaan op Windows Phone 8.

De mobiele architectuur van geïsoleerde opslag is vergelijkbaar met de op Silverlight gebaseerde applicaties op Windows. Alle I / O-bewerkingen zijn beperkt tot geïsoleerde opslag en hebben geen directe toegang tot het onderliggende OS-bestandssysteem, wat helpt om beveiliging te bieden en ongeautoriseerde toegang en gegevenscorruptie door andere apps voorkomt. Als u gegevens tussen twee toepassingen wilt delen, hebt u een soort cloudservice nodig die deze gegevens voor u kan delen. 

De lokale map is de hoofdmap van de gegevensopslag van uw app. Er zijn twee manieren om gegevens lokaal op te slaan. De eerste manier is via een verzameling naam / waarde-paren genaamd IsolatedStorageSettings. De andere manier is door het creëren van werkelijke bestanden en mappen genoemd IsolatedStorageFile. Hier zijn een paar dingen die het vermelden waard zijn over geïsoleerde opslag:

  • Geïsoleerde opslag gebruikt toestemmingsquota's, waarvoor opslaglimieten zijn ingesteld IsolatedStoragePermission voorwerpen.
  • Als u probeert gegevens te schrijven die de quota overschrijden, IsolatedStorageException uitzondering wordt gegooid.
  • IsolatedStorageFilePermission beslist of toestemming wordt gegeven voor het bestand of de map. 

1. URI-schema's

Gebruik de isostore of ms-appdata URI-schema-namen bij het adresseren van de lokale map in een pad. Beide URI-schema's geven u toegang tot de lokale map, maar ze kunnen niet onderling uitwisselbaar worden gebruikt. ms-appdata wordt gebruikt om de hoofdmap van de lokale map met API's aan te pakken, terwijl isostore wordt gebruikt om de hoofdmap van de lokale map te adresseren. Het volgende voorbeeld laat dit zien. 

// Maak een lokale database in de lokale map met het isostore-URI-schema. MyDataContext db = nieuwe MyDataContext ("isostore: /mydb.sdf"); // Haal een bestand op uit de lokale map met het ms-appdata URI-schema. var file = await Windows.StorageFile.GetFileFromApplicationUriAsync (new Uri ("ms-appdata: ///local/AppConfigSettings.xml"));

ms-appdata vereist drie schuine strepen (///) en isostore vereist slechts één schuine streep (/). De totale lengte van het pad voor een van de twee URI-schema's mag niet langer zijn dan 185 tekens.

2. IsolatedStorageSettings

De eenvoudigste manier om gegevens in geïsoleerde opslag te plaatsen, is door de IsolatedStorageSettings klasse, dat is een Woordenboek die sleutel / waarde-paren opslaat in geïsoleerde opslag. IsolatedStorageSettings wordt meestal gebruikt om instellingen op te slaan, zoals het aantal afbeeldingen dat per pagina wordt weergegeven, opties voor paginalay-out, enzovoort. De gegevens die zijn opgeslagen in IsolatedStorageSettings blijft bestaan ​​bij het starten van applicaties.

Als u alleen instellingen wilt opslaan zoals Gebruikersnaam = "Fred", dan kun je de gebruiken Applicatie instellingen object in geïsoleerde opslag. Het wordt op dezelfde manier gebruikt als een woordenboek. De saveString methode kan worden gebruikt om een ​​reekswaarde op te slaan bericht voor de sleutel naam.

void saveString (tekenreeksbericht, tekenreeksnaam) IsolatedStorageSettings.ApplicationSettings [name] = bericht; IsolatedStorageSettings.ApplicationSettings.Save (); 

De opslag werkt als een woordenboek, maar vergeet niet te bellen Opslaan wanneer u klaar bent met het toevoegen van sleutels.

Als u waarden uit instellingen wilt ophalen, gebruikt u de loadString methode die de sleutel van de opgeslagen instellingen als een parameter neemt en de waarde retourneert als de sleutel bestaat.

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

Test of de sleutel bestaat voordat u hem probeert te vinden. Als u probeert de waarde te krijgen voor een sleutel die niet bestaat, wordt een uitzondering gegenereerd.

Een goede gewoonte is om een ​​speciale statische klasse te maken die de instellingen van uw toepassing bevat. Dit maakt het gemakkelijk om op elk moment toegang te krijgen tot alle eigendommen in uw toepassing.

Als u aan een Universal Windows-app-project werkt en vervolgens gebruikt IsolatedStorageSettings.ApplicationSettings geeft een syntaxisfout. U moet het vervangen Windows.Storage.ApplicationData.Current.LocalSettings.

3. IsolatedStorageFile

IsolatedStorageFile is het mechanisme dat u kunt gebruiken om bestanden op het apparaat van een gebruiker op te slaan. U kunt verschillende bewerkingen uitvoeren op de geïsoleerde opslag, zoals het maken van mappen en bestanden, schrijven naar een bestand, lezen van gegevens, verwijderen van bestanden, enz.

Deze bestanden en mappen zijn niet toegankelijk voor andere applicaties die op het apparaat van de gebruiker zijn geïnstalleerd. De IsolatedStorageFileStream class wordt gebruikt voor het lezen, schrijven en maken van bestanden in geïsoleerde opslag. Deze klasse breidt zich uit Bestandsstroom, wat betekent dat je een instantie van kunt gebruiken IsolatedStorageFileStream in de meeste situaties waar a Bestandsstroom instantie anders zou kunnen worden gebruikt, zoals om een ​​te bouwen StreamReader of StreamWriter.

Naar een bestand schrijven 

In het volgende codefragment ziet u hoe u naar een bestand schrijft in geïsoleerde opslag. De saveGameToIsolatedStorage functie maakt een nieuw bestand aan in geïsoleerde opslag en slaat de reeks op bericht in het.

private void saveGameToIsolatedStorage (tekenreeksbericht) using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication ()) using (IsolatedStorageFileStream rawStream = isf.CreateFile ("MyFile.store")) StreamWriter writer = new StreamWriter (rawStream); writer.WriteLine (bericht); // sla de berichtschrijver op.Sluit ();  

Uit een bestand lezen

De loadString functie leest en retourneert de tekst in het bestand. De functie gebruikt Bestand bestaat om eerst te controleren of het bestand bestaat in geïsoleerde opslag. Het gebruikt dan een instantie van StreamReader om het bestand te lezen.

private string loadString () stringresultaat = null; using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication ()) if (isf.FileExists ("Myfile.store") using (IsolatedStorageFileStream rawStream = isf.OpenFile (bestandsnaam, System.IO.FileMode.Open)) StreamReader-reader = nieuw StreamReader (rawStream); result = reader.ReadLine (); reader.Close (); retourneer resultaat; 

Geïsoleerde opslag is niet beschikbaar voor Windows Store-apps. Gebruik in plaats daarvan de toepassingsgegevensklassen in de Windows.Storage naamruimten opgenomen in de Windows Runtime API om lokale gegevens en bestanden op te slaan.

Het wordt aanbevolen om de instanties van IsolatedStorageFile en IsolatedStorageFileStream wanneer ze niet langer nodig zijn. De gebruik makend van verklaring doet dit automatisch voor u en het gebruik ervan wordt als een goede gewoonte beschouwd.

Schrijven naar een bestaand bestand

Om de inhoud van een bestaand bestand te overschrijven, gebruikt u een exemplaar van de StreamWriter klasse om het bestand te openen. De parameters FileMode.Open en FileAccess.Write worden doorgegeven om het bestand te openen met schrijftoegang. Hierdoor wordt de bestaande inhoud met nieuwe gegevens overschreven.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication (); if (myIsolatedStorage.FileExists (bestandsnaam)) using (StreamWriter writeFile = nieuwe StreamWriter (nieuwe IsolatedStorageFileStream (bestandsnaam, FileMode.Open, FileAccess.Write, myIsolatedStorage))) string someTextData = "Leer coderen met Tuts +"; writeFile.WriteLine (someTextData); writeFile.Close (); 

Toevoegen aan een bestaand bestand

Gegevens toevoegen aan een bestaand bestand lijkt veel op het schrijven van gegevens naar een bestaand bestand. De enige verandering die nodig is, is het instellen van de bestandsmodus op FileMode.APPEND.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication (); if (myIsolatedStorage.FileExists (filename)) if (myIsolatedStorage.FileExists (bestandsnaam)) using (StreamWriter writeFile = nieuwe StreamWriter (nieuwe IsolatedStorageFileStream (bestandsnaam, FileMode.Append, FileAccess.Write, myIsolatedStorage))) string someTextData = " Gebruik Tuts + om creatieve vaardigheden te leren, uw toekomst vorm te geven "; writeFile.WriteLine (someTextData); writeFile.Close ();  

Een tekstbestand verwijderen

Om een ​​tekstbestand te verwijderen, controleren we eerst of het tekstbestand in geïsoleerde opslag bestaat en vervolgens gebruiken Verwijder bestand om het bestand te verwijderen.

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

Ik raad u aan de voorbeeldtoepassing van deze zelfstudie te verkennen om te zien hoe u gegevens in een bestand kunt lezen, schrijven en toevoegen.

4. Geïsoleerde opslagverkenner

Bij het debuggen van een toepassing moet u mogelijk de bestanden en mappen controleren die in de geïsoleerde opslag van uw app zijn opgeslagen om te controleren of de juiste bestanden op de juiste locatie worden opgeslagen. Emulators en apparaten met Windows Phone 8 of lager kunnen gebruikmaken van Windows Phone Power Tools, een op GUI's gebaseerde tool voor toegang tot de geïsoleerde opslag van apps.

Een andere optie is het gebruik van de Geïsoleerde opslagverkenner of ISETool, een opdrachtregelhulpprogramma geïnstalleerd samen met de Windows Phone SDK. U kunt ISETool gebruiken om bestanden en mappen in de lokale map van uw app weer te geven, te kopiëren en te vervangen.

ISETool kan met elk apparaat of elke emulator worden gebruikt en wordt meestal op de volgende locatie geïnstalleerd:

Program Files (x86) \ MicrosoftSDKs \ WindowsPhone \ v8.0 \ Tools \ IsolatedStorageExplorerTool

Hier zijn een paar dingen die het vermelden waard zijn tijdens het gebruik van ISETool:

  • De app moet op de emulator of het apparaat zijn geïnstalleerd.
  • De emulator of het apparaat moet worden ontgrendeld, maar de app hoeft niet te worden uitgevoerd.
  • U hebt geen toegang tot de geïsoleerde opslag van apps die zijn geïnstalleerd vanuit de Windows Phone Store.
  • U kunt de instellingen die zijn opgeslagen met de .nl niet bekijken IsolatedStorageSettings klasse met ISETool.

Als u ISETool wilt gebruiken, moet u de volgende syntaxis gebruiken:

ISETool.exe    []

Hier zijn een paar dingen die gedaan kunnen worden met ISETool.

Bestanden kopiëren van geïsoleerde opslag naar computer

  1. Implementeer de app die u wilt testen op de emulator of een apparaat en maak lokale bestanden en mappen. 
  2. Download de app-ID van de Product-ID attribuut van het app-element in de WMAppManifest.xml het dossier.
  3. Navigeren naar ISETool.exe gebruik de opdrachtprompt en voer de volgende opdracht uit om alle bestanden van de geïsoleerde opslag van de app naar uw computer te kopiëren.
ISETool.exe ts xd f8ce6878-0aeb-497f-bcf4-65be961d4bba c: \ data \ mijnbestanden

Bestanden in geïsoleerde opslag vervangen

Herhaal de voorgaande drie stappen en gebruik de volgende opdracht om bestanden in de geïsoleerde opslag van de app te vervangen.

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

Als u meer wilt weten over de ISETool, raad ik u aan een ander artikel te lezen dat ik schreef over het gebruik van de ISETool.

Conclusie

We hebben twee eenvoudige mechanismen beschikbaar op Windows Phone, IsolatedStorageSettings en IsolatedStorageFile. Geïsoleerde opslag vertegenwoordigt een opslaggebied dat bestanden en mappen bevat die niet toegankelijk zijn voor andere applicaties. Geïsoleerde opslag is in veel situaties nuttig. Download de bronbestanden van de zelfstudie om te gebruiken als referentie.