Operación no permitida en Aislado StorageFilStram. error
-
29-10-2019 - |
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))
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)
{
}