8

Tengo un problema con el almacenamiento aislado.Operación no permitida en IsolatedStorageFileStream. error

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)) 

Respuesta

16

Esto generalmente ocurre cuando ejecuta ese bloque de código varias veces al mismo tiempo. Usted termina bloqueando el archivo. Por lo tanto, usted tiene que asegurarse de incluir modos FileAccess y FileShare en su constructor como este:

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

Si desea escribir en el fichero mientras que otros están leyendo, entonces usted necesita para 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) 
    { 
     //... 
    } 
} 
+0

esta respuesta también es válida para Windows Phone 8. gracias. –

0

Reemplazar la instrucción using interior con una constructora IsolatedStorageFileStream:

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

También, ya que estás leyendo desde el archivo, supongo que el FileMode desea es abierto, no OpenOrCreate.

Y donde se le asigna 'datos', considere el uso

serializer.Deserialize(isoStream) as List<Notes> 

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

+0

como su sugerencia de que el cambio sea: datos = serializer.Deserializer (isoStream) como lista , pero tengo problema nuevo Hay un error en el documento XML (0, 0) – yozawiratama

+0

Parece que no ha escrito previamente en este IsolatedStorageFile, ¿es correcto? O la lógica de negocios de su aplicación debe garantizar que el archivo se haya escrito previamente, o debe verificar la existencia del archivo, antes de intentar leerlo. Escriba el archivo usando una construcción similar a la que tiene para la lectura del archivo, pero llamando a Serialize en lugar de Deserialize, y utilizando FileMode.OpenOrCreate. –

-1

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

Agregar espacios de nombres

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

Crear un directorio de destino en el 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 utilizar

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

En lugar de añadir nombre del archivo en el destino añadir foldername.

Puede reproducir archivos multimedia mediante el uso 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) 
    { 
    } 
Cuestiones relacionadas