2

var... 行を使用して、SoundData のコードを更新しました。私は実際に保存するフォルダーを確認していますが、フォルダーを選択して保存しようとすると例外が発生します。

+ $exception {System.IO.FileNotFoundException: システムは、指定されたファイルを見つけることができません。

ここで app.xaml.cs:

IStorageFile sourceFile = await folder.GetFileAsync(sourceFilePath);

アプリ.xaml.cs:

private async void Application_ContractActivated(object sender, Windows.ApplicationModel.Activation.IActivatedEventArgs e)
    {
        var args = e as FileSavePickerContinuationEventArgs;
        if (args != null)
        {
            StorageFile file = args.File;
            if (file != null)
            {
                // Prevent updates to the remote version of the file until we finish making changes and call CompleteUpdatesAsync. 
                CachedFileManager.DeferUpdates(file);
                // write to file 
                var sourceFilePath = args.ContinuationData["SourceSound"].ToString();  
                StorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
                StorageFile sourceFile = await folder.GetFileAsync(sourceFilePath);

                IRandomAccessStreamWithContentType sourceStream = await sourceFile.OpenReadAsync();

             var bytes = new byte[sourceStream.Size];

             var sourceBuffer = await sourceStream.ReadAsync(bytes.AsBuffer(), (uint)sourceStream.Size, Windows.Storage.Streams.InputStreamOptions.None);

                await FileIO.WriteBufferAsync(file, sourceBuffer);
                // Let Windows know that we're finished changing the file so the other app can update the remote version of the file. 
                // Completing updates may require Windows to ask for user input. 
                FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);
            }
        }
    }

サウンドデータ ビューモデル:

 private async void ExecuteSaveSoundAs(string soundPath)
    {

        var file = await ApplicationData.Current.LocalFolder.GetFileAsync(SavePath);

        FileSavePicker savePicker = new FileSavePicker();
        savePicker.SuggestedSaveFile = file;
        savePicker.FileTypeChoices.Add("MP3", new List<string>() { ".mp3" });
        savePicker.ContinuationData.Add("SourceSound", SavePath);
        savePicker.SuggestedFileName = this.Title;
        savePicker.PickSaveFileAndContinue();
    }


    public SoundData()
    {
        SaveSoundAs = new RelayCommand<string>(ExecuteSaveSoundAs);            
    }

サウンドモデル:

private SoundGroup CreateSoftwareGroup()
    {
        SoundGroup data = new SoundGroup();

        data.Title = "OS/Software";

        data.Items.Add(new SoundData
        {
            Title = "Test1",
            FilePath = "https://xxxxx.test1.mp3",
            Groups = "Test",
            SavePath = "Test1.mp3"
        });

        data.Items.Add(new SoundData
        {
            Title = "Test2",
            FilePath = "https://xxxxx.Test2.mp3",
            Groups = "Test",
            SavePath = "Test2.mp3"
        });
4

1 に答える 1

0

解決策は次のとおりです。

Mainpage.cs のコードが変更されました:

 var sourceFilePath = args.ContinuationData["SourceSound"].ToString();
                StorageFolder folder = ApplicationData.Current.LocalFolder;
                StorageFile sourceFile = await folder.GetFileAsync(sourceFilePath);

そして私の FileSavePicker コード:

private async void ExecuteSaveSoundAs(string soundPath)
    {

        var file = await ApplicationData.Current.LocalFolder.GetFileAsync(SavePath);

        FileSavePicker savePicker = new FileSavePicker();
        savePicker.SuggestedSaveFile = file;
        savePicker.FileTypeChoices.Add("MP3", new List<string>() { ".mp3" });
        savePicker.ContinuationData.Add("SourceSound", SavePath);
        savePicker.SuggestedFileName = this.Title;
        savePicker.PickSaveFileAndContinue();
    }
于 2014-07-05T14:33:58.073 に答える