0

我正在尝试使用 WP 8.1 RT 中的 PickSaveFileAndContinue() 方法将文件保存到 Documents 文件夹中。一切都很好,除了保存的文件是空的。当我在 OnActivated() 方法中获取从以下代码返回的文件时,它的大小为零。

任何人?

var database = await    FileHelper.GetFileAsync(ApplicationData.Current.LocalFolder, DATABASE_NAME);
FileSavePicker savePicker = new FileSavePicker();
savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
savePicker.FileTypeChoices.Add("Database File", new List<string>() { ".db" });
savePicker.DefaultFileExtension = ".db";
savePicker.SuggestedFileName = DATABASE_NAME;
savePicker.SuggestedSaveFile = database;

选择位置后,将在 App.xaml.cs 中执行以下代码。我尝试使用 ContinuationManager 在同一页面内执行此操作。但是结果是一样的。

 protected async override void OnActivated(IActivatedEventArgs args)
    {
        byte[] buffer = null;
        if(args!=null)
        {
            if(args.Kind == ActivationKind.PickSaveFileContinuation)
            {
                var file = ((FileSavePickerContinuationEventArgs)args).File;//This is empty
                using (IRandomAccessStreamWithContentType stream = await file.OpenReadAsync())
                {
                    buffer = new byte[stream.Size];
                    using (DataReader reader = new DataReader(stream))
                    {
                        await reader.LoadAsync((uint)stream.Size);
                        reader.ReadBytes(buffer);
                    }
                }

                if (file != null)
                {
                    CachedFileManager.DeferUpdates(file);
                    await FileIO.WriteBytesAsync(file, buffer);
                    Windows.Storage.Provider.FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);
                }
            }
        }
        base.OnActivated(args);
    }
4

1 回答 1

0

这是预期的。PickSaveFileAndContinue 不知道应用要保存什么。它只是提供一个空的 StorageFile。然后应用程序可以将它想要保存的任何内容写入文件中。

于 2015-06-27T02:32:58.910 回答