【问题标题】:UWP FileSavePicker Contract File ProcessingUWP FileSavePicker 合约文件处理
【发布时间】:2017-01-18 01:53:16
【问题描述】:

在我的应用程序中,我使用的是 FileSavePicker 合同(提供者)。所以其他应用程序可以将文件保存到我的应用程序。我实现了它,如 MSDN 上所示。现在的问题是,我必须处理一个“已保存”的文件,但我怎么知道,何时保存完成?这是我的处理程序

private async void FileSavePickerUI_TargetFileRequested(FileSavePickerUI sender, TargetFileRequestedEventArgs args)
{
        var deferral = args.Request.GetDeferral();

        string saveFileName = sender.FileName;

        StorageFolder fileSavePickerContractTempFolder = await ApplicationData.Current.LocalCacheFolder.CreateFolderAsync("FileSavePickerContract", CreationCollisionOption.OpenIfExists);

        StorageFile fileSavePickerContractTempFile = await fileSavePickerContractTempFolder.CreateFileAsync(saveFileName, CreationCollisionOption.ReplaceExisting);

        args.Request.TargetFile = fileSavePickerContractTempFile;

        deferral.Complete();
    }

我的应用程序的目标是周年纪念更新 (1607)。在 deferral.Complete() 之后,我需要更多地使用该文件以集成到我的应用程序中。有人能指出我正确的方向吗?

【问题讨论】:

  • 使用await fileSavePickerContractTempFolder.CreateFileAsync().ContinueWith((s,a)=> { <!-- Write your code here --> })
  • IAsyncOperation 不包含“ContinueWith”的定义
  • 试试这个,看看它是否有效? StorageFile fileSavePickerContractTempFile = await fileSavePickerContractTempFolder.CreateFileAsync(saveFileName, CreationCollisionOption.ReplaceExisting).AsTask<StorageFile>().ContinueWith((file) => { <!-- Your Code Goes here --> return file.Result; });
  • 也没有工作。在“”上,我调用了一个方法并将 StorageFile 传入,但此时 StorageFile 甚至有 0bytes。
  • 对这个问题没有更多的想法?

标签: c# uwp win-universal-app filesavepicker


【解决方案1】:

有了 CacheFileUpdater,我可以在文件被完全写入后立即做出反应

CachedFileUpdater.SetUpdateInformation(fileSavePickerContractTempFile, url, ReadActivationMode.NotNeeded, WriteActivationMode.AfterWrite, CachedFileOptions.None);

在 App.xaml.cs 上,我现在覆盖了“OnCachedFileUpdaterActivated”事件,在该事件中我可以使用完整写入的文件执行一些操作。所以现在可以按预期工作了。

但是!这在 Windows 10 Mobile 上不起作用,App.xaml.cs 上的 OnCachedFileUpdaterActivated EventHandler 没有被触发,这是为什么呢?

【讨论】:

  • 没人能帮我解决这个问题吗?
  • 我也有同样的问题。不知道如何解决。 DropBox 应用程序以某种方式工作,但不是我的。 DropBox 做了同样的事情(前一段时间):jonathanantoine.com/2013/03/25/…
【解决方案2】:

您的文件保存在await CreateFileAsync 行之后。方法CreateFileAsync本身返回IAsyncOperation,如果你await它,当这个操作完成时会执行await之后的下一行。

【讨论】:

  • 是的,但是如果我想处理一个文件,例如从保管箱应用程序保存的文件,那么这个文件仍在下载中,文件大小为 0。
  • 它选择要保存的文件未完成。
  • 我怎么知道什么时候完成?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 2013-08-13
相关资源
最近更新 更多