如何在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。

如何在StorageFolder中保存FolderPicker中的文件夹

试试这个。您必须使用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对象作为参数;但是,不管怎样,当我尝试使用FolderPickerStorageFolder创建文件夹时,以下内容对我有效。

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:

"总结第一条准则,你应该更喜欢异步任务而不是异步无效。异步任务方法可以更容易地处理错误、可组合性和可测试性。"