StorageFolder 没有通过获取文件夹异步获取任何数据

StorageFolder not getting any data back with get folders async

我遵循了 Microsoft 的示例,了解如何访问使用文件夹选择器选择的文件夹。这样做之后,我想获取所选顶级文件夹中子文件夹的所有路径。但是我没有得到任何结果。

代码:

var folderPicker = new Windows.Storage.Pickers.FolderPicker();
folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add("*");
folderPicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();

if (folder != null)
{
    Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.AddOrReplace("GameFilesToken", folder);
    System.Diagnostics.Debug.WriteLine(folder.Path);

    await FileManagementHelper.getFolders(folder.Path);
}

public static async Task<Queue<string>> getFolders(String TopLevel)
{
    var Folder = await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.GetFolderAsync("GameFilesToken");

    var queryResults = Folder.CreateFolderQuery();
    var folderList = await queryResults.GetFoldersAsync();

    return new Queue<string>();
}

QueryResults 使我可以访问一个文件夹,与我最初使用的文件夹相同。 FolderList 什么也没给我。

FolderList gives me nothing.

您获得的 folderList 代码片段可以很好地工作,如果所选文件夹有子文件夹,folderList 对象确实有值。请更新您的 getfolders 方法以通过代码检查 folderList,如下所示:

   var Folder = await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.GetFolderAsync("GameFilesToken");
   var queryResults = Folder.CreateFolderQuery();
   var folderList = await queryResults.GetFoldersAsync();
   foreach (StorageFolder folder in  folderList )
   {
       Debug.WriteLine(folder.Path); 
   }

I wanted to get all the paths of the sub folders within the selected top folder. I don't get any results however.

实际上,如果你想列出所有的,你可以使用StorageFolder.GetFoldersAsync() method to get all sub folders for the selected top folder object, there is no need to use CreateFolderQuery()方法。代码如下:

private async void btngetfolder_Click(object sender, RoutedEventArgs e)
{
    var folderPicker = new Windows.Storage.Pickers.FolderPicker();
    folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
    folderPicker.FileTypeFilter.Add("*");
    folderPicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
    Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();

    if (folder != null)
    {
        IReadOnlyList<StorageFolder> folderList = await folder.GetFoldersAsync();
        foreach (StorageFolder subfolder in folderList)
        {
            Debug.WriteLine("subfolder path:" + subfolder.Path);
        } 
    }
}

更多细节请参考FolderEnumeration官方样本。

更新: 如果你想让所有的子文件夹都包含后代子文件夹,你需要将QueryOptions.FolderDepth设置为deep。代码如下:

 var Folder = await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.GetFolderAsync("GameFilesToken");
 QueryOptions options = new QueryOptions();
 options.FolderDepth = FolderDepth.Deep;
 var queryResults = Folder.CreateFolderQueryWithOptions(options);    
 var folderList = await queryResults.GetFoldersAsync();

 foreach (StorageFolder folder in  folderList )
 {
     Debug.WriteLine(folder.Path); 
 }