Domanda

Ho un problema con l'archiviazione isolata.

Questo è il mio codice:

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'errore: operazione non consentita su IsolatedStorageFestream. in

using (IsolatedStorageFileStream isoStream = 
        isoStore.OpenFile("Notes.xml", FileMode.OpenOrCreate))
È stato utile?

Soluzione

Questo di solito accade quando si esegue quel blocco di codice più volte contemporaneamente. Finite per bloccare il file. Quindi, devi assicurarti di includere le modalità FiliAccess e Fileshare nel tuo costruttore in questo modo:

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

Se vuoi scrivere nel file mentre gli altri stanno leggendo, allora devi sincronizzare il blocco in questo modo:

private readonly object _readLock = new object();

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

Altri suggerimenti

Sostituire l'istruzione interna usando un costruttore di filestream IsolatedStorage:

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

Inoltre, dal momento che stai leggendo dal file, presumo che il filemode che desideri sia aperto, non aperto.

E dove vengono assegnati i "dati", prendi in considerazione l'uso

serializer.Deserialize( isoStream ) as List<Notes>

invece. Vedere l'articolo 3 in Effettiva C#, 2a ed.

In caso di Silverlight può accadere anche quando l'intero percorso supera un determinato limite di carattere. Non sono riuscito a trovare alcun riferimento ufficiale per questo, ma come ho testato su Win10 e IE, sembra essere tra 115 e 120 caratteri.

Operazioni non consentite su IsolatedStorageFestream. Errore al momento del trasferimento del file dalla destinazione Fileto condivisa. Sta funzionando

Aggiungi spazi dei nomi

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

Crea una directory di destinazione in archiviazione isolata

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

 {

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

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

 }

o usare

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

Invece di aggiungere il nome file in destinazione aggiungi FoldName.

È possibile giocare ai media utilizzando il seguente codice

 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)
  {
  }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top