2016-11-23 2 views
2

Я следовал примеру Microsoft, как получить доступ к папкам, которые были выбраны с помощью папокщика. После этого я хотел получить все пути вложенных папок в выбранной верхней папке. Однако я не получаю никаких результатов.StorageFolder не получает данные обратно с получением папок async

Код:

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 ничего мне не дает.

ответ

1

FolderList ничего не дает.

Ваше получение 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); 
    } 

Я хотел, чтобы все пути подпапки в выбранной верхней папке. Однако я не получаю никаких результатов.

На самом деле, вы можете просто использовать 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); 
} 
+0

Я понимаю свою проблему, единственное, что мне нужно, чтобы получить все каталоги под верхним уровнем. Так, например, TopLevel \, TopLevel \ Folder1, TopLevel \ Folder2, TopLevel \ Folder1 \ SubFolder1 –

+0

@BaileyMiller, в этом случае вам необходимо установить [FolderDepth] (https://msdn.microsoft.com/en-us/ библиотека/windows/apps/windows.storage.search.queryoptions.folderdepth.aspx) свойство deep. Подробности см. В моем обновленном ответе. –

Смежные вопросы