问题
I have a problem with isolated storage.
This is my 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;
the mistake : Operation not permitted on IsolatedStorageFileStream. in
using (IsolatedStorageFileStream isoStream =
isoStore.OpenFile("Notes.xml", FileMode.OpenOrCreate))
回答1:
This usually happens when you execute that code block several times concurrently. You end up locking the file. So, you have to make sure you include FileAccess and FileShare modes in your constructor like this:
using (var isoStream = new IsolatedStorageFileStream("Notes.xml", FileMode.Open, FileAccess.Read, FileShare.Read, isolatedStorage)
{
//...
}
If you want to write to the file while others are reading, then you need to synchronize locking like this:
private readonly object _readLock = new object();
lock(_readLock)
{
using (var isoStream = new IsolatedStorageFileStream("Notes.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, isolatedStorage)
{
//...
}
}
回答2:
Replace the inner using statement with an IsolatedStorageFileStream constructor:
using ( var isoStream = new IsolatedStorageFileStream( "Notes.xml", FileMode.Open, isoStore ) )
Also, since you're reading from the file, I assume the FileMode you want is Open, not OpenOrCreate.
And where 'data' is assigned, consider using
serializer.Deserialize( isoStream ) as List<Notes>
instead. See Item 3 in Effective C#, 2nd Ed.
回答3:
In case of Silverlight it can also happen when the full path exceeds a certain character limit. I could not find any official reference for this, but as I have tested in on win10 and IE, it seems to be somewhere between 115 and 120 chars.
回答4:
Operation not permitted on IsolatedStorageFileStream. error at the time of moving file from shared fileto destination. Its working
Add Namespaces
using BackgroundProcess.Resources;
using Microsoft.Phone.BackgroundTransfer;
using System.IO.IsolatedStorage;
Create one destination directory in isolated storage
BackgroundTransferRequest transfer;
using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isoStore.GetDirectoryNames("DestinationFolder").Length == 0)
isoStore.CreateDirectory("DestinationFolder");
storage.MoveFile("/shared/transfers/xyzFileName.mp3", "DestinationFolder");
}
or use
isoStore.MoveFile(transfer.DownloadLocation.OriginalString, "DestinationFolder");
Instead of adding filename in destination add foldername.
You can play media by using following code
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)
{
}
来源:https://stackoverflow.com/questions/8415979/operation-not-permitted-on-isolatedstoragefilestream-error