IsolatedStorageFileStream上不允许操作。 错误

我有孤立存储的问题。

这是我的代码:

List data = new List(); using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream isoStream = isoStore.OpenFile("Notes.xml", FileMode.OpenOrCreate)) { XmlSerializer serializer = new XmlSerializer(typeof(List)); data = (List)serializer.Deserialize(isoStream); } } data.Add(new Notes() { Note = "hai", DT = "Friday" }); return data; 

错误:IsolatedStorageFileStream上不允许操作。 在

 using (IsolatedStorageFileStream isoStream = isoStore.OpenFile("Notes.xml", FileMode.OpenOrCreate)) 

当您同时执行多次代码块时,通常会发生这种情况。 你最终锁定了文件。 因此,您必须确保在构造函数中包含FileAccess和FileShare模式,如下所示:

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

如果你想在其他人正在阅读时写入文件,那么你需要像这样同步锁定:

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

将内部using语句替换为IsolatedStorageFileStream构造函数:

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

此外,由于您正在从文件中读取,因此我假设您想要的FileMode是Open,而不是OpenOrCreate。

在分配“数据”的地方,请考虑使用

 serializer.Deserialize( isoStream ) as List 

代替。 参见Effective C#,2nd Ed中的第3项。

IsolatedStorageFileStream上不允许操作。 将文件从共享文件移动到目标时的错误。 它的工作

添加命名空间

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

在隔离存储中创建一个目标目录

  BackgroundTransferRequest transfer; using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) { if (isoStore.GetDirectoryNames("DestinationFolder").Length == 0) isoStore.CreateDirectory("DestinationFolder"); storage.MoveFile("/shared/transfers/xyzFileName.mp3", "DestinationFolder"); } 

或使用

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

而不是在目的地添加文件名添加foldername。

您可以使用以下代码播放媒体

  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) { }