Trabajar con almacenamiento aislado en Windows Phone 8

El almacenamiento aislado se utiliza para almacenar datos locales en un teléfono con Windows. Está "aislado" porque otras aplicaciones no pueden acceder a estos datos. En este tutorial, obtendrá una descripción general del almacenamiento aislado y aprenderá cómo usarlo para almacenar datos de forma más segura en Windows Phone 8.

La arquitectura móvil del almacenamiento aislado es similar a las aplicaciones basadas en Silverlight en Windows. Todas las operaciones de E / S están restringidas a almacenamiento aislado y no tienen acceso directo al sistema de archivos del sistema operativo subyacente, lo que ayuda a proporcionar seguridad y evita el acceso no autorizado y la corrupción de datos de otras aplicaciones. Si desea compartir datos entre dos aplicaciones, necesitará algún tipo de servicio basado en la nube que pueda compartir esos datos por usted.. 

La carpeta local es la carpeta raíz del almacén de datos de su aplicación. Hay dos formas de almacenar datos localmente. La primera forma es a través de una colección de pares nombre / valor llamados AislamientoAlmacenamientoAjustes. La otra forma es a través de la creación de archivos y carpetas reales llamados Archivo de almacenamiento aislado. Aquí hay algunas cosas que vale la pena mencionar sobre el almacenamiento aislado:

  • El almacenamiento aislado utiliza cuotas de permisos, que son límites de almacenamiento establecidos por AislamientoAlmacenamientoPermisión objetos.
  • Si intenta escribir datos que exceden la cuota, un IsolatedStorageException se lanza la excepción.
  • IsolatedStorageFilePermission Decide si otorgar permiso al archivo o directorio.. 

1. Esquemas URI

Utilizar el isostore o ms-appdata Nombres de esquema URI al direccionar la carpeta local en una ruta. Ambos esquemas de URI le permiten acceder a la carpeta local, pero no se pueden usar de manera intercambiable. ms-appdata se utiliza para direccionar la raíz de la carpeta local con API, mientras que isostore Se utiliza para direccionar la raíz de la carpeta local. El siguiente ejemplo demuestra esto. 

// Crear una base de datos local en la carpeta local con el esquema URI isostore. MyDataContext db = new MyDataContext ("isostore: /mydb.sdf"); // Obtenga un archivo de la carpeta local con el esquema de URI ms-appdata. var archivo = aguarda Windows.StorageFile.GetFileFromApplicationUriAsync (new Uri ("ms-appdata: ///local/AppConfigSettings.xml"));

ms-appdata requiere tres barras (///) y isostore requiere solo una barra (/). La longitud total de la ruta para cualquiera de los dos esquemas de URI no puede exceder los 185 caracteres.

2. AislamientoAlmacenamientoAjustes

La forma más sencilla de colocar los datos en un almacenamiento aislado es utilizar el AislamientoAlmacenamientoAjustes clase, que es un Diccionario que almacena pares clave-valor en almacenamiento aislado. AislamientoAlmacenamientoAjustes normalmente se usa para guardar configuraciones, como la cantidad de imágenes que se muestran por página, las opciones de diseño de la página, etc. Los datos guardados en AislamientoAlmacenamientoAjustes Persiste en todos los lanzamientos de aplicaciones..

Si solo desea almacenar información de configuración como Nombre de usuario = "Fred", entonces puedes usar el Configuraciones de la aplicación Objeto en almacenamiento aislado. Se usa de la misma manera que usaría un diccionario. los saveString El método puede usarse para guardar un valor de cadena. mensaje para la llave nombre.

void saveString (mensaje de cadena, nombre de cadena) IsolatedStorageSettings.ApplicationSettings [nombre] = mensaje; IsolatedStorageSettings.ApplicationSettings.Save (); 

El almacenamiento funciona como un diccionario, pero recuerda llamar Salvar cuando hayas terminado de añadir llaves.

Para recuperar valores de la configuración, puede utilizar el loadString método que toma la clave de la configuración guardada como parámetro y devuelve el valor si la clave existe.

string loadString (nombre de cadena) if (IsolatedStorageSettings.ApplicationSettings.Contains (nombre)) return (cadena) IsolatedStorageSettings.ApplicationSettings [nombre];  else return null;  

Prueba si la clave existe antes de intentar encontrarla. Si está intentando obtener el valor de una clave que no existe, se lanzará una excepción.

Una buena práctica es crear una clase estática especial, que contenga la configuración de su aplicación. Esto facilita el acceso a cualquier propiedad en su aplicación en cualquier momento.

Si estás trabajando en un proyecto de aplicación universal de Windows, entonces estás usando IsolatedStorageSettings.ApplicationSettings dará un error de sintaxis. Necesitas reemplazarlo con Windows.Storage.ApplicationData.Current.LocalSettings.

3. Archivo de almacenamiento aislado

Archivo de almacenamiento aislado es el mecanismo que puede utilizar para almacenar archivos en el dispositivo de un usuario. Puede realizar varias operaciones en el almacenamiento aislado, como crear carpetas y archivos, escribir en un archivo, leer datos, eliminar archivos, etc..

Estos archivos y carpetas no son accesibles para otras aplicaciones instaladas en el dispositivo del usuario. los AisladoAlmacenamientoFileStream La clase se usa para leer, escribir y crear archivos en almacenamiento aislado. Esta clase se extiende FileStream, lo que significa que puede utilizar una instancia de AisladoAlmacenamientoFileStream en la mayoría de las situaciones donde un FileStream de otro modo podría utilizarse, como para construir un StreamReader o StreamWriter.

Escribir en un archivo 

El siguiente fragmento de código le muestra cómo escribir en un archivo en almacenamiento aislado. los saveGameToIsolatedStorage La función crea un nuevo archivo en almacenamiento aislado y guarda la cadena mensaje en eso.

private void saveGameToIsolatedStorage (mensaje de cadena) using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication ()) using (IsolatedStorageFileStream rawStream en el estado de cuenta). writer.WriteLine (mensaje); // guardar el mensaje writer.Close ();  

Leer de un archivo

los loadString La función lee y devuelve el texto contenido en el archivo. La función utiliza El archivo existe para comprobar primero si el archivo existe en almacenamiento aislado. A continuación, utiliza una instancia de StreamReader para leer el archivo.

cadena privada 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 (rawStream); result = reader.ReadLine (); reader.Close (); devolver el resultado; 

El almacenamiento aislado no está disponible para las aplicaciones de la Tienda Windows. En su lugar, utilice las clases de datos de la aplicación en el Windows.Almacenamiento espacios de nombres incluidos en la API de tiempo de ejecución de Windows para almacenar datos y archivos locales.

Se recomienda desechar las instancias de Archivo de almacenamiento aisladoAisladoAlmacenamientoFileStream cuando ya no son necesarios. los utilizando La declaración lo hace automáticamente por usted y su uso se considera una buena práctica..

Escribir en un archivo existente

Para sobrescribir el contenido de un archivo existente, use una instancia de StreamWriter Clase para abrir el archivo. Los parametros FileMode.OpenFileAccess.Write Se pasan para abrir el archivo con acceso de escritura. Esto sobrescribirá el contenido existente con nuevos datos..

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

Anexando a un archivo existente

Agregar datos a un archivo existente es muy similar a escribir datos en un archivo existente. El único cambio necesario es configurar el modo de archivo para FileMode.Append.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication (); if (myIsolatedStorage.FileExists (nombre de archivo)) if (myIsolatedStorage.FileExists (nombre de archivo)) using (StreamWriter writeFile = new StreamWriter (new IsolatedStorageFileStream) (filename) Usa Tuts + para aprender habilidades creativas, moldear tu futuro "; writeFile.WriteLine (someTextData); writeFile.Close ();  

Eliminar un archivo de texto

Para eliminar un archivo de texto, primero verificamos si el archivo de texto existe en un almacenamiento aislado y luego usamos Borrar archivo para borrar el archivo.

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication (); if (myIsolatedStorage.FileExists (nombre de archivo)) myIsolatedStorage.DeleteFile (nombre de archivo); 

Le animo a explorar la aplicación de ejemplo de este tutorial para ver cómo leer, escribir y agregar datos a un archivo.

4. Explorador de almacenamiento aislado

Al depurar una aplicación, es posible que deba revisar los archivos y carpetas guardados en el almacenamiento aislado de su aplicación para verificar que los archivos correctos se estén guardando en la ubicación correcta. Los emuladores y dispositivos que ejecutan Windows Phone 8 o inferior pueden usar Windows Phone Power Tools, que es una herramienta basada en GUI para acceder al almacenamiento aislado de aplicaciones.

Otra opción es usar el Explorador de almacenamiento aislado ISETool, una herramienta de línea de comandos instalada junto con el SDK de Windows Phone. Puede usar ISETool para listar, copiar y reemplazar archivos y directorios en la carpeta local de su aplicación.

ISETool se puede utilizar con cualquier dispositivo o emulador, y generalmente se instala en la siguiente ubicación:

Archivos de programa (x86) \ MicrosoftSDKs \ WindowsPhone \ v8.0 \ Tools \ IsolatedStorageExplorerTool

Aquí hay algunas cosas que vale la pena mencionar al usar ISETool:

  • La aplicación debe estar instalada en el emulador o dispositivo..
  • El emulador o dispositivo debe estar desbloqueado, pero la aplicación no tiene que estar ejecutándose.
  • No puede acceder al almacenamiento aislado de aplicaciones instaladas desde la Tienda de Windows Phone.
  • No puede ver las configuraciones almacenadas usando AislamientoAlmacenamientoAjustes clase usando ISETool.

Para usar ISETool, necesitas usar la siguiente sintaxis:

ISETool.exe    El]

Aquí hay un par de cosas que se pueden hacer usando ISETool.

Copiar archivos de almacenamiento aislado a la computadora

  1. Implemente la aplicación que desea probar en el emulador o en un dispositivo, y cree archivos y directorios locales. 
  2. Obtener el ID de la aplicación de la Identificación de producto atributo del elemento de la aplicación en el WMAppManifest.xml expediente.
  3. Navegar a ISETool.exe con el símbolo del sistema y ejecute el siguiente comando para copiar todos los archivos del almacenamiento aislado de la aplicación a su computadora.
ISETool.exe ts xd f8ce6878-0aeb-497f-bcf4-65be961d4bba c: \ data \ myfiles

Reemplazo de archivos en almacenamiento aislado

Repita los tres pasos anteriores y use el siguiente comando para reemplazar archivos en el almacenamiento aislado de la aplicación.

ISETool.exe rs xd f8ce6878-0aeb-497f-bcf4-65be961d4bba “C: \ Data \ Mis archivos”

Si desea obtener más información sobre ISETool, le sugiero que lea otro artículo que escribí sobre el uso de ISETool.

Conclusión

Tenemos dos mecanismos simples disponibles en Windows Phone., AislamientoAlmacenamientoAjustes y Archivo de almacenamiento aislado. El almacenamiento aislado representa un área de almacenamiento que contiene archivos y directorios a los que otras aplicaciones no pueden acceder. El almacenamiento aislado es útil en muchas situaciones. Siéntase libre de descargar los archivos fuente del tutorial para usar como referencia.