我正试图通过这种方式将一些信息保存到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时我收到了一个Unauthorized Access异常。
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;
}
有趣的是,我试图在模拟器和手机中启动应用程序,似乎只有在手机上运行才会抛出异常。
编辑:我发现它只是第一次与文件进行交互(看起来不需要创建文件),但我该如何解决这个问题呢?
答案 0 :(得分:0)
首先,需要本地化问题的起源。您可以尝试多次调用等待WriteRecentScores方法(在相同方法的范围内)。我想它会正常工作。然后我们可以说问题来源不在文件修改逻辑本身中。
问题肯定是由某人同时使用该文件引起的。这可能是由于无意中同时多次调用“保存”方法引起的。例如,经常对HardwareButtons.BackPressed事件进行文件修改,如果在未实现页面时取消订阅,则下次在页面上按下Back按钮将导致您的处理程序同时被调用两次。