Windows Phone 8.1 RT Метод PickSaveFileAndContinue() создает пустой файл

Я пытаюсь сохранить файл в папку "Документы" с помощью метода PickSaveFileAndContinue() в WP 8.1 RT. Все происходит хорошо, за исключением файла, который был сохранен, пуст. Когда я получаю файл, возвращенный из следующего кода в методе OnActivation (), его размер равен нулю.

Кто-нибудь?

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);
    }

1 ответ

Это ожидается. PickSaveFileAndContinue не знает, что приложение хочет сохранить. Он просто предоставляет пустой StorageFile. Затем приложение может записать любое содержимое, которое оно хочет сохранить в файл.

Другие вопросы по тегам