我有一个管理文档的WinRT Metro应用程序(XAML/C#,Windows Release Preview)。文档在内存中表示,并通过Web服务获取,但不是物理存储在磁盘上。
为了改进我的应用程序,我想实现FileSavePicker契约。因此,其他应用程序可以将其文档直接保存到我的应用程序中。但似乎不可能将内存中文件保存选择器中的内容放入我的应用程序中。我向FileSavePickerActivatedEventArgs.FileSavePickerUI.TargetFileRequested事件附加了一个事件处理程序,当用户想要将文件保存到我的应用程序时会触发该事件。但在这里,我必须将TargetFileRequestedEventArgs.Request.TargetFile设置为StorageFile,因为我在内存中,并且还没有文件,所以此操作失败。
此外(即使我有一个StorageFile),我必须在文件保存过程完成时做出反应,而且似乎没有任何方法/事件可以用来处理这个问题。
我不明白为什么微软决定在文件保存选择器合同中采用这种API方式。为什么我不能将保存的数据/文件作为参数/流,然后做我想做的事情?在这种情况下,沙箱/安全性不可能是原因!
编辑:我已经看过SDK中的文件选择器合同示例应用程序,但它没有帮助,因为它只保存到物理StorageFile。
发布于 2012-07-25 23:37:38
你看过CachedFileUpdater contract了吗?您可以使用此选项在源应用对文件进行写入时接收通知。您仍然需要为此创建一个StorageFile。
发布于 2012-07-26 08:17:12
您需要使用StorageFile.CreateStreamedFileAsync。当请求数据时,此方法将向您返回一个由您即时构建的StorageFile。当从"file“请求数据时,将调用传递给第二个参数的委托。当这种情况发生时,您可以从任何想要的流中注入数据。
https://stackoverflow.com/questions/11650397
复制相似问题