Copiando Archivos al Isolated Storage de Windows Phone
Copiar archivos al Isolated Storage de Windows Phone no es tan sencillo como crear nuevo contenido allí.
Copiar en este contexto, significa tomar algún archivo que esté almacenado en nuestro proyecto como contenido por ejemplo y luego pasarlo al Isolated Storage. Las situaciones en que esto hace sentido, son por ejemplo cuando queremos tener imágenes para los tiles, o para mostrar como contenido estático formateado en Web a través del WebBrowser Control de WP.
Como ejemplo aquí trato de escribir un mapa de bits obtenido de los contenidos del proyecto
var bitImage = new BitmapImage();
bitImage.CreateOptions = BitmapCreateOptions.None;
bitImage.UriSource = new Uri("Images/car.png", UriKind.Relative);
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var st = new IsolatedStorageFileStream(
WOW.passingCar.ImgUrl, FileMode.Create, FileAccess.Write, store))
{
WriteableBitmap wbmp = new WriteableBitmap(bitImage);
wbmp.SaveJpeg(st, 173, 173, 0, 100);
}
}
Pero por seguridad y como su nombre lo indica, el Isolated Storage ha de tener su propio puntero de datos. De manera que si intentamos hacer que el reader que leyó el archivo escriba sobre el Isolated Storage, entonces se nos producirá la siguiente excepción: (NullReferenceException was unhandled. Invalid Pointer)
Tenemos entonces que proceder a un accionar un poco más elaborado:
byte[] data;
StreamResourceInfo sr = Application.GetResourceStream(new Uri("Images/car.png",
UriKind.Relative));
using (BinaryReader br = new BinaryReader(sr.Stream))
{
data = br.ReadBytes((int)sr.Stream.Length);
}
using (BinaryWriter bw = new BinaryWriter(store.CreateFile
(WOW.passingCar.ImgUrl)))
{
bw.Write(data);
bw.Close();
}
Como se nota, es necesario recurrir a unos procedimientos un poco más básicos en los que recurrimos a los BinaryReader y BinaryWriter. Parece un poco complejo, pero es necesario, dada la naturaleza del Isolated Storage.