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. Затем приложение может записать любое содержимое, которое оно хочет сохранить в файл.