Question

J'ai un problème avec le stockage isolé.

Voici mon code:

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;

l'erreur: opération non autorisée sur IsolatedStorageFileStream.dans

using (IsolatedStorageFileStream isoStream = 
        isoStore.OpenFile("Notes.xml", FileMode.OpenOrCreate))
Était-ce utile?

La solution

Cela se produit généralement lorsque vous exécutez ce bloc de code plusieurs fois simultanément.Vous finissez par verrouiller le fichier.Donc, vous devez vous assurer que vous incluez les modes FileAccess et FileShare dans votre constructeur comme ceci:

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

Si vous voulez écrire dans le fichier pendant que d'autres lisent, vous devez synchroniser le verrouillage comme ceci:

private readonly object _readLock = new object();

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

Autres conseils

Remplacez l'instruction using interne par un constructeur IsolatedStorageFileStream:

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

De plus, puisque vous lisez à partir du fichier, je suppose que le FileMode que vous voulez est Open, pas OpenOrCreate.

Et là où les "données" sont attribuées, pensez à utiliser

serializer.Deserialize( isoStream ) as List<Notes>

à la place.Voir l'élément 3 dans Effective C #, 2e édition.

Dans le cas de Silverlight, cela peut également se produire lorsque le chemin complet dépasse une certaine limite de caractères.Je n'ai pas trouvé de référence officielle à ce sujet, mais comme je l'ai testé sur win10 et IE, il semble se situer entre 115 et 120 caractères.

Opération non autorisée sur IsolatedStorageFileStream.erreur au moment du déplacement du fichier du fichier partagé vers la destination.Son fonctionnement

Ajouter des espaces de noms

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

Créez un répertoire de destination dans un stockage isolé

 BackgroundTransferRequest transfer;
 using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())

 {

      if (isoStore.GetDirectoryNames("DestinationFolder").Length == 0)
           isoStore.CreateDirectory("DestinationFolder");

      storage.MoveFile("/shared/transfers/xyzFileName.mp3", "DestinationFolder");

 }

ou utilisez

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

Au lieu d'ajouter un nom de fichier dans la destination, ajoutez un nom de dossier.

Vous pouvez lire des fichiers multimédias en utilisant le code suivant

 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)
  {
  }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top