Pregunta

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 Aislado StorageFilStram. en

using (IsolatedStorageFileStream isoStream = 
        isoStore.OpenFile("Notes.xml", FileMode.OpenOrCreate))
¿Fue útil?

Solución

Esto generalmente sucede cuando ejecuta ese bloque de código varias veces al mismo tiempo. Terminas bloqueando el archivo. Por lo tanto, debe asegurarse de incluir los modos de FileAccess y FileShare en su constructor así:

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 debe sincronizar el bloqueo así:

private readonly object _readLock = new object();

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

Otros consejos

Reemplace la declaración interna de usar con un constructor aislado de storagefilStram:

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

Además, dado que está leyendo desde el archivo, supongo que el FileMode que desea está abierto, no OpenIrcreate.

Y donde se asignan 'datos', considere usar

serializer.Deserialize( isoStream ) as List<Notes>

en cambio. Consulte el artículo 3 en efectivo C#, 2ª ed.

En el caso de Silverlight, también puede suceder cuando el camino completo excede un cierto límite de caracteres. No pude encontrar ninguna referencia oficial para esto, pero como he probado en Win10 e IE, parece estar entre 115 y 120 caracteres.

Operación no permitida en Aislado StorageFilStram. Error al momento de mover el archivo del destino de fileto compartido. 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 fijación.

Puedes jugar 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)
  {
  }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top