2

Updated my code in my SoundData with the var...line. Im actually getting as far as seeing the folders to save to now, but im getting an exception when I attempt to pick a folder and save to it.

+ $exception {System.IO.FileNotFoundException: The system cannot find the file specified.

here on app.xaml.cs:

IStorageFile sourceFile = await folder.GetFileAsync(sourceFilePath);

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

SoundData ViewModel:

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

SoundModel:

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"
        });
Community
  • 1
  • 1
user3568429
  • 151
  • 8

1 Answers1

0

Here is the solution:

Code in Mainpage.cs modified:

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

And my FileSavePicker code:

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();
    }
user3568429
  • 151
  • 8