C# 从Windows应用商店应用程序在“图片收藏”中创建子文件夹

C# 从Windows应用商店应用程序在“图片收藏”中创建子文件夹,c#,windows-runtime,windows-store-apps,winrt-xaml,.net-4.5,C#,Windows Runtime,Windows Store Apps,Winrt Xaml,.net 4.5,我正在尝试从Windows应用商店应用在我的图片文件夹中创建文件夹结构。但我似乎无法通过第一关 我使用以下代码创建一级文件夹: IAsyncOperation<StorageFolder> appFolder = Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos"); if (appFolder==null) { //Create folder appFolder = Win

我正在尝试从Windows应用商店应用在我的图片文件夹中创建文件夹结构。但我似乎无法通过第一关

我使用以下代码创建一级文件夹:

IAsyncOperation<StorageFolder> appFolder = Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos");

if (appFolder==null)
{
    //Create folder
    appFolder = Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("AppPhotos");
}
但是我的appFolder中没有CreateFolderAsync方法

那么,我如何创建该文件夹,然后如何选择它

提前谢谢


我正在使用Visual Studio 2012、C#4.5和XAML,正在编写一个windows应用商店应用程序。

您似乎错过了异步/等待革命,并假设获取文件夹的操作是文件夹。这应该起作用:

var appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos");

if (appFolder == null)
{
    //Create folder
    appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("AppPhotos");
}
您还需要在上述代码所在的方法签名中添加
async
关键字,如果您的方法返回的值类型为
T
,请将其更改为return
Task
,因此对于方法签名:

private void MyMethod()
你会把它改成

private async Task MyMethod()
如果你现在的签名是

private bool MyMethod()
你需要这样做

private async Task<bool> MyMethod()


等等。使用
async
关键字标记所有调用等待其他方法的方法。

您似乎错过了异步/wait革命,并假定获取文件夹的操作是文件夹。这应该起作用:

var appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos");

if (appFolder == null)
{
    //Create folder
    appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("AppPhotos");
}
您还需要在上述代码所在的方法签名中添加
async
关键字,如果您的方法返回的值类型为
T
,请将其更改为return
Task
,因此对于方法签名:

private void MyMethod()
你会把它改成

private async Task MyMethod()
如果你现在的签名是

private bool MyMethod()
你需要这样做

private async Task<bool> MyMethod()


等等。使用
async
关键字标记所有调用等待其他方法的方法。

要在图片库中创建文件夹和子文件夹:

  StorageFolder appFolder;
  try
    {
       appFolder = await  Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos");

    }
  catch (Exception ex)
    {

      appFolder = null;

     }
 if (appFolder == null)
   {

   //Create folder
    appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("AppPhotos");

    }

    //Create sub-folder
   await appFolder.CreateFolderAsync("level1");

要在图片库中创建文件夹和子文件夹,请执行以下操作:

  StorageFolder appFolder;
  try
    {
       appFolder = await  Windows.Storage.KnownFolders.PicturesLibrary.GetFolderAsync("AppPhotos");

    }
  catch (Exception ex)
    {

      appFolder = null;

     }
 if (appFolder == null)
   {

   //Create folder
    appFolder = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("AppPhotos");

    }

    //Create sub-folder
   await appFolder.CreateFolderAsync("level1");

async
相当于
void
-返回方法是
async Task
,而不是
async void
。除此之外,回答得很好。是的,我忘记了规则是避免触发&忘记异步方法。但是你还没有回答我的问题。我已经可以创建名为AppPhotos的文件夹,但我希望能够在名为Level1的文件夹中创建一个文件夹。这就是问题所在,如果您向代码中添加waits,使appFolder是一个文件夹而不是一个操作,那么您只需执行appFolder.CreateFolderAsync(“Level1”);明亮的感谢您的帮助
async
相当于
void
——返回方法是
async Task
,而不是
async void
。除此之外,回答得很好。是的,我忘记了规则是避免触发&忘记异步方法。但是你还没有回答我的问题。我已经可以创建名为AppPhotos的文件夹,但我希望能够在名为Level1的文件夹中创建一个文件夹。这就是问题所在,如果您向代码中添加waits,使appFolder是一个文件夹而不是一个操作,那么您只需执行appFolder.CreateFolderAsync(“Level1”);明亮的感谢您的帮助Gross,只需使用CreationCollisionOption.OpenIfExistsGross,只需使用CreationCollisionOption.OpenIfExists