FileSavePicker:保存到内存?

时间:2012-07-25 13:05:56

标签: c# windows-8 microsoft-metro windows-runtime

我有一个管理文档的WinRT Metro应用程序(XAML / C#,Windows Release Preview)。这些文档在内存中表示,并通过Web服务获取,但不是物理存储在磁盘上。

为了改进我的应用程序,我想实现FileSavePicker合约。因此其他应用可以将他们的文档直接保存到我的应用程但似乎无法将内存中的文件保存选择器中的内容导入我的应用程序。我已将事件处理程序附加到当用户想要将文件保存到我的应用程序时触发的FileSavePickerActivatedEventArgs.FileSavePickerUI.TargetFileRequested事件。但是在这里我必须将TargetFileRequestedEventArgs.Request.TargetFile设置为StorageFile,因为我在内存中并且还没有文件,所以此操作失败。

此外(即使我有一个StorageFile)我必须对文件保存过程的完成作出反应,似乎没有我可以采取的方法/事件来处理这个问题。

我不明白为什么微软决定采用这种API方式来保存文件保存选择器合同。为什么我不能将保存的数据/文件作为参数/流来获取并执行我想要的操作?在这种情况下,沙盒/安全性不是原因!

编辑:我已经看过并查看了SDK中的文件选择器合约示例应用程序,但它没有帮助,因为它只保存到物理StorageFile。

2 个答案:

答案 0 :(得分:0)

你看过CachedFileUpdater contract了吗?当源应用程序写入文件时,您可以使用它来接收通知。您仍然需要为此创建一个StorageFile。

答案 1 :(得分:0)

您需要使用StorageFile.CreateStreamedFileAsync。此方法将返回一个StorageFile,它是在您请求数据时由您构建的。当从“文件”请求数据时,将调用您在第二个参数中传递的委托。发生这种情况时,您可以从任何所需的流中提取数据。