【问题标题】:Unauthorized Access exception in OpenStreamForWriteAsync Windows Phone 8.1OpenStreamForWriteAsync Windows Phone 8.1 中的未经授权的访问异常
【发布时间】:2016-02-02 21:48:13
【问题描述】:

我正在尝试以这种方式将一些信息保存到 ApplicationData.Current.LocalFolder 中的文件中:

private async Task WriteRecentScores(List<ScoreRecord> list)
    {
        try
        {
            var serializer = new DataContractJsonSerializer(typeof(List<ScoreRecord>));
            using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(
                          RECENTSCOREFILE,
                          CreationCollisionOption.ReplaceExisting))
            {
                serializer.WriteObject(stream, list);
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
            Debug.WriteLine(ex.StackTrace);
        }
    }

但我在到达 OpenStreamForWriteAsync 时遇到未经授权的访问异常。

RECENTSCOREFILE="score.json" 是第一次启动应用程序时创建的文件(我使用的是 FailIfExists 选项),这是代码

private async void CreateFile()
    {
        try
        {
            StorageFolder folder = ApplicationData.Current.LocalFolder;
            StorageFile file = await folder.CreateFileAsync(RECENTSCOREFILE, CreationCollisionOption.FailIfExists);
        }
        catch (Exception) { }

        return;
    }

有趣的是,我尝试在模拟器和手机中启动该应用程序,似乎只有在手机上运行时才会引发异常。

编辑:我发现它仅在我第一次与文件交互时才有效(似乎不需要创建文件),但我该如何解决这个问题?

【问题讨论】:

  • 您在其他地方使用该文件吗? - 例如阅读乐谱?可能之前的流还没有被释放。
  • 是的,我正在从我的应用程序的另一个页面读取同一个文件,但我不知道为什么它只能在模拟器中工作
  • 你找到解决办法了吗?

标签: windows-phone-8.1 jsonserializer unauthorizedaccessexcepti


【解决方案1】:

首先需要定位问题的根源。您可以尝试多次调用 await WriteRecentScores 方法(在同一方法的范围内)。我想它会正常工作的。那么我们可以说问题的根源不在文件修改逻辑本身。

这个问题肯定是因为有人同时使用了该文件。这可能是由于同时多次意外调用“Save”方法引起的。例如,经常在 HardwareButtons.BackPressed 事件上进行文件修改,如果在离开页面时取消订阅未实现,则下次在页面上按下后退按钮将导致您的处理程序同时被调用两次。

【讨论】:

    猜你喜欢
    • 2014-07-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多