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

时间:2013-09-02 11:43:40

标签: c# storagefolder

当我尝试这样做时:

        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 Studio   2012 \项目\ RobimyProjekt \ RobimyProjekt \ ImageBrowser.xaml.cs。

当我删除“等待”时,它会显示另一个错误:

  

错误2无法隐式转换类型   'Windows.Foundation.IAsyncOperation'来   'Windows.Storage.StorageFolder'C:\ Users \ Lukasz \ Documents \ Visual   工作室   2012 \ Projects \ RobimyProjekt \ RobimyProjekt \ ImageBrowser.xaml.cs 61 36 RobimyProjekt。

发生了什么事?该代码来自msdna,我使用Visual Studio 2012。

4 个答案:

答案 0 :(得分:1)

试试这个。您必须使用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);
    }

}

答案 1 :(得分:1)

以下内容对我有用。我花了几天的时间才弄清楚。但是,对于我自己的学习项目,我想看看是否可以制作一个文件夹,文件然后从中读取。通过执行以下操作,我能够在指定的路径中创建文件夹。

当然,我正在传递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.";
    }
}

答案 2 :(得分:0)

将其更改为

private async void (pickFolder(object sender, RoutedEventArgs e)

答案 3 :(得分:0)

听取错误消息中的建议也可能是一个好主意:

  

考虑使用'async'修饰符标记此方法,并将其返回类型更改为'Task'。

Task返回类型使方法“等待”。

其他答案中建议的void解决方案也有效,但产生了一个'火&amp;忘了'解决方案。建议的做法是实际返回Task,以便在调用者希望执行某些操作时,例如,由您的方法产生的异常,这是可能的。

引用http://msdn.microsoft.com/en-us/magazine/jj991977.aspx

  

“总结第一个指南,你应该更喜欢async Task to async void。异步任务方法可以使错误处理,可组合性和可测试性更容易。”