如何在StorageFolder中保存FolderPicker中的文件夹
本文关键字:FolderPicker 文件夹 保存 StorageFolder | 更新日期: 2023-09-27 18:29:50
当我尝试这样做时:
folderPicker = new FolderPicker();
folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add(".txt");
StorageFolder folder = await folderPicker.PickSingleFolderAsync();
它显示错误:
错误2"await"运算符只能在异步方法中使用。请考虑使用"async"修饰符标记此方法并更改其返回类型为"Task"。C: ''Users''Lukasz''Documents''Visual Studio2012''Projects''RobinyProject''RobinyProjekt''ImageBrowser.xaml.cs.
当我删除"等待"时,它显示了另一个错误:
错误2无法隐式转换类型"Windows.Foundation.IAsyncOperation"到'Windows.Storage.StorageFolder'C:''Users''Lukasz''Documents''Visual演播室2012''Projects''RobinyProject''RobinyProjekt''ImageBrowser.xaml.cs 61 36 RobinyProjekt。
怎么回事?该代码来自msdna,我使用Visual Studio 2012。
试试这个。您必须使用async关键字来表示等待。
private async void pickFolder(object sender, RoutedEventArgs e)
{
folderPicker = new FolderPicker();
folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
folderPicker.ViewMode = PickerViewMode.List;
folderPicker.FileTypeFilter.Add(".txt");
StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if(folder != null)
{
StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder);
}
}
以下内容对我有效。我花了几天时间才弄清楚;但是,对于我自己的学习项目,我想看看我是否可以制作一个文件夹、文件,然后从中读取。我可以通过以下操作在指定的路径中创建文件夹。
当然,我正在传递一个Textbox对象作为参数;但是,不管怎样,当我尝试使用FolderPicker
和StorageFolder
创建文件夹时,以下内容对我有效。
public static async Task<string> createDirectory(TextBox parmTextBox)
{
string folderName = parmTextBox.Text.Trim();
// Section: Allows the user to choose their folder.
FolderPicker fpFolder = new FolderPicker();
fpFolder.SuggestedStartLocation = PickerLocationId.Desktop;
fpFolder.ViewMode = PickerViewMode.Thumbnail;
fpFolder.FileTypeFilter.Add("*");
StorageFolder sfFolder = await fpFolder.PickSingleFolderAsync();
if (sfFolder.Name != null)
{
// Gives the StorageFolder permissions to modify files in the specified folder.
Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.AddOrReplace("CSharp_Temp", sfFolder);
// creates our folder
await sfFolder.CreateFolderAsync(folderName);
// returns a string of our path back to the user
return string.Concat(sfFolder.Path, @"'", folderName);
}
else
{
MessageDialog msg = new MessageDialog("Need to choose a folder.");
await msg.ShowAsync();
return "Error: Choose new folder.";
}
}
将其更改为
private async void (pickFolder(object sender, RoutedEventArgs e)
听取错误消息中的建议也是一个好主意:
请考虑使用"async"修饰符标记此方法,并将其返回类型更改为"Task"。
Task
返回类型使方法"不可用"。
其他答案中提出的void
解决方案也有效,但会产生"fire&忘记'解决方案。建议的做法是实际返回一个Task
,这样,如果调用者希望对您的方法产生的异常进行处理,这是可能的。
引用自http://msdn.microsoft.com/en-us/magazine/jj991977.aspx:
"总结第一条准则,你应该更喜欢异步任务而不是异步无效。异步任务方法可以更容易地处理错误、可组合性和可测试性。"