c# silverlight windows-phone-7 windows-phone-8 isolatedstorage

c# - Operación no permitida en IsolatedStorageFileStream. error



silverlight windows-phone-7 (3)

Tengo un problema con el almacenamiento aislado.

Este es mi código:

List<Notes> data = new List<Notes>(); using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream isoStream = isoStore.OpenFile("Notes.xml", FileMode.OpenOrCreate)) { XmlSerializer serializer = new XmlSerializer(typeof(List<Notes>)); data = (List<Notes>)serializer.Deserialize(isoStream); } } data.Add(new Notes() { Note = "hai", DT = "Friday" }); return data;

el error: operación no permitida en IsolatedStorageFileStream. en

using (IsolatedStorageFileStream isoStream = isoStore.OpenFile("Notes.xml", FileMode.OpenOrCreate))


Reemplace la instrucción using interna con un constructor IsolatedStorageFileStream:

using ( var isoStream = new IsolatedStorageFileStream( "Notes.xml", FileMode.Open, isoStore ) )

Además, como está leyendo el archivo, asumo que el Modo de archivo que desea es Abierto, no OpenOrCreate.

Y donde se asigna "datos", considere usar

serializer.Deserialize( isoStream ) as List<Notes>

en lugar. Ver el Item 3 en Effective C #, 2nd Ed.


Esto generalmente ocurre cuando ejecuta ese bloque de código varias veces al mismo tiempo. Usted termina bloqueando el archivo. Por lo tanto, debe asegurarse de incluir los modos FileAccess y FileShare en su constructor de la siguiente manera:

using (var isoStream = new IsolatedStorageFileStream("Notes.xml", FileMode.Open, FileAccess.Read, FileShare.Read, isolatedStorage) { //... }

Si desea escribir en el archivo mientras otros están leyendo, entonces necesita sincronizar el bloqueo de esta manera:

private readonly object _readLock = new object(); lock(_readLock) { using (var isoStream = new IsolatedStorageFileStream("Notes.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, isolatedStorage) { //... } }


Operación no permitida en IsolatedStorageFileStream. error al momento de mover el archivo del archivo compartido al destino. Esta funcionando

Agregar espacios de nombres

using BackgroundProcess.Resources; using Microsoft.Phone.BackgroundTransfer; using System.IO.IsolatedStorage;

Crear un directorio de destino en almacenamiento aislado

BackgroundTransferRequest transfer; using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) { if (isoStore.GetDirectoryNames("DestinationFolder").Length == 0) isoStore.CreateDirectory("DestinationFolder"); storage.MoveFile("/shared/transfers/xyzFileName.mp3", "DestinationFolder"); }

o usar

isoStore.MoveFile(transfer.DownloadLocation.OriginalString, "DestinationFolder");

En lugar de agregar el nombre de archivo en el destino, agregue el nombre de la carpeta.

Puede reproducir medios usando el siguiente código

try { string isoFileName = "DestinationFolder//xyzFileName.mp3"; StorageFile file = null; try { file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/" + isoFileName)); } catch (Exception ex) { } if (file != null) await Windows.System.Launcher.LaunchFileAsync(file); } catch (Exception ex) { }