2017-01-11 8 views
0

В моем приложении я использую контракт FileSavePicker (поставщик). Таким образом, другие приложения могут сохранять файлы в моем приложении. Я реализовал его, как показано на MSDN. Проблема в том, что я должен обработать «сохраненный» файл, но как узнать, когда сэкономление будет завершено? Вот мой обработчикUWP FileSavePicker Обработка файлов контракта

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() Мне нужно больше работать с этим файлом для интеграции в моем приложении. Может ли кто-нибудь указать мне в правильном направлении?

+0

использование 'ждут fileSavePickerContractTempFolder.CreateFileAsync() ContinueWith ((s, а) => {}).' – AVK

+0

IAsyncOperation не содержит определение для 'ContinueWith' – andy

+0

Try это и посмотреть, работает ли это? 'StorageFile fileSavePickerContractTempFile = await fileSavePickerContractTempFolder.CreateFileAsync (saveFileName, CreationCollisionOption.ReplaceExisting) .AsTask () .ContinueWith ((file) => { return file.Result;});' – AVK

ответ

1

С CacheFileUpdater я могу реагировать на файл, как только она написана полностью

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

На App.xaml.cs я переопределить теперь «OnCachedFileUpdaterActivated» событие, в котором я могу выполнить некоторые действия с полностью написанный файл. Так что это работает сейчас, как ожидалось.

НО! Это не работает на Windows 10 Mobile, там не активирован OnCachedFileUpdaterActivated EventHandler на App.xaml.cs, почему это?

+0

Неужели никто не может помочь мне решить эту проблему? – andy

+0

У меня такая же проблема. Не знаю, как это исправить. Приложение DropBox работает как-то, но не мое. DropBox сделал то же самое (некоторое время назад): http://www.jonathanantoine.com/2013/03/25/win8-the-cached-file-updater-contract-or-how-to-make-more-useful -The-файл-сохранить-подборщик-контракт / –

0

Ваш файл сохраняется после строки с await CreateFileAsync. Метод CreateFileAsync сам по себе возвращает IAsyncOperation, если вы await, следующая строка после await будет выполнена, когда эта операция будет завершена.

+0

Да, но если я хочу обработать файл, который сохраняется, например, из приложения Dropbox, этот файл по-прежнему загружается, а размер файла равен 0. – andy

+0

Его файл для сохранения не заканчивается. – lindexi

+0

И как я узнаю, когда он будет готов? – andy