简体   繁体   中英

Changing FileSavePicker to save file FROM Isolated Storage instead of App storage. Exception WP8.1

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM