gpt4 book ai didi

c# - 获取隔离 StorageException : Operation not permitted on IsolatedStorageFileStream

转载 作者:太空狗 更新时间:2023-10-29 17:49:44 25 4
gpt4 key购买 nike

我在以下代码中遇到上述异常和错误,这意味着从独立存储中播放选定的 mp3 文件:

using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var isfs = isf.OpenFile(selected.Path, FileMode.Open))
{
this.media.SetSource(isfs);
isfs.Close();
}
isf.Dispose();
}

这个错误太模糊了,我真的不确定哪里出了问题......有什么想法或至少是我可以检查的这个错误的常见来源吗?

编辑:异常被抛出在:using(var isfs = isf.OpenFile(...))

编辑 2:堆栈跟踪...

at System.IO.IsolatedStorage.IsolatedStorageFileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, IsolatedStorageFile isf)
at System.IO.IsolatedStorage.IsolatedStorageFileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, IsolatedStorageFile isf)
at System.IO.IsolatedStorage.IsolatedStorageFileStream..ctor(String path, FileMode mode, IsolatedStorageFile isf)
at Ringify.Phone.PivotContent.RingtoneCollectionPage.MediaIconSelected(Object sender, GestureEventArgs e)
at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)

我也意识到,如果我播放一首歌曲然后停止播放(用户界面中有一个播放和暂停按钮),然后播放另一首歌曲,则不会发生错误。当我播放一首歌曲、停止播放并尝试再次播放同一首歌曲时,就会出现这种情况。

最佳答案

当您播放同一首音乐两次时会出现该问题,因此可能是文件共享问题。您应该尝试提供 OpenFile 方法的 FileShare 参数:

var isfs = isf.OpenFile(selected.Path, FileMode.Open, FileShare.Read)

虽然我不明白为什么会发生这种情况,因为您明确关闭了文件。

编辑: 好吧,用 Reflector 做了一些挖掘,我想通了。 MediaElement.SetSource 的代码是:

public void SetSource(Stream stream)
{
if (stream == null)
{
throw new ArgumentNullException("stream");
}
if (stream.GetType() != typeof(IsolatedStorageFileStream))
{
throw new NotSupportedException("Stream must be of type IsolatedStorageFileStream");
}
IsolatedStorageFileStream stream2 = stream as IsolatedStorageFileStream;
stream2.Flush();
stream2.Close();
this.Source = new Uri(stream2.Name, UriKind.Absolute);
}

所以基本上它不会使用您提供的流,甚至会关闭它。但它保留了文件的名称,我想它会在您播放音乐时重新打开它。因此,如果您尝试在播放音乐时以独占访问权限重新打开同一个文件,则会失败,因为 MediaElement 已打开该文件。棘手。

关于c# - 获取隔离 StorageException : Operation not permitted on IsolatedStorageFileStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com