使用var ...行更新了SoundData中的代码。我实际上已经看到要保存到现在的文件夹,但是当我尝试选择一个文件夹并保存到它时,我得到一个例外。
+ $ exception {System.IO.FileNotFoundException:系统找不到指定的文件。
这里是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"
});
答案 0 :(得分: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();
}