【问题标题】:StorageFolder not getting any data back with get folders asyncStorageFolder 没有通过异步获取文件夹取回任何数据
【发布时间】:2016-11-23 00:21:27
【问题描述】:

我遵循了一个关于如何访问使用文件夹选择器选择的文件夹的 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 什么也没给我。

【问题讨论】:

    标签: c# uwp windows-10-universal file-access


    【解决方案1】:

    FolderList 什么也没给我。

    你得到的folderList 代码 sn-p 可以很好地工作,如果所选文件夹有子文件夹,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); 
       }
    

    我想获取所选顶级文件夹中子文件夹的所有路径。但是我没有得到任何结果。

    实际上,您可以使用StorageFolder.GetFoldersAsync() 方法获取所选顶层文件夹对象的所有子文件夹,如果要全部列出,则无需使用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 设置为深度。代码如下:

     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); 
     }
    

    【讨论】:

    • 我理解我的问题,唯一的事情是我需要获取顶层下的所有目录。例如,TopLevel\, TopLevel\Folder1, TopLevel\Folder2, TopLevel\Folder1\SubFolder1
    • @BaileyMiller 在这种情况下,您需要将 FolderDepth 属性设置为 deep。详情请看我更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2022-01-21
    • 2017-07-21
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多