0

WP 8.1 RT で PickSaveFileAndContinue() メソッドを使用してドキュメント フォルダーにファイルを保存しようとしています。保存されるファイルが空であることを除いて、すべてがうまくいっています。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 に答える