2016-11-23 1 views
2

J'ai suivi un exemple Microsoft sur l'accès aux dossiers sélectionnés avec un sélecteur de dossier. Après cela, je voulais obtenir tous les chemins des sous-dossiers dans le dossier supérieur sélectionné. Je n'ai pas de résultats cependant.StorageFolder ne récupère aucune donnée avec des dossiers asynchrones

code:

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 me donne accès à un dossier, le même dossier que je l'utilise à l'origine. FolderList ne me donne rien.

Répondre

1

FolderList ne me donne rien.

Votre obtenir extrait folderList de code peut bien fonctionner, objet folderList faire a des valeurs si le dossier sélectionné ont des sous-dossiers. S'il vous plaît mettre à jour votre méthode getfolders pour vérifier le folderList par le code comme suit:

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

Je voulais obtenir tous les chemins des sous-dossiers dans le dossier supérieur sélectionné. Je n'ai pas de résultats cependant.

En fait, vous pouvez simplement utiliser la méthode StorageFolder.GetFoldersAsync() pour obtenir tous les sous-dossiers pour l'objet dossier supérieur sélectionné, il n'y a pas besoin d'utiliser la méthode CreateFolderQuery() si vous voulez énumérer tous. Code comme suit:

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

Plus de détails veuillez faire référence à l'échantillon officiel FolderEnumeration.

Mise à jour: Si vous voulez que tous les sous-dossiers incluent des sous-dossiers de descendants, vous devez définir QueryOptions.FolderDepth comme profond. Code comme suit:

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

Je comprends mon problème, la seule chose est que je dois obtenir tous les répertoires sous le niveau supérieur. Donc, comme par exemple, TopLevel \, TopLevel \ Folder1, TopLevel \ Dossier2, TopLevel \ Folder1 \ SubFolder1 –

+0

@BaileyMiller dans ce cas, vous devez définir [FolderDepth] (https://msdn.microsoft.com/fr-fr/ library/windows/apps/windows.storage.search.queryoptions.folderdepth.aspx) propriété à profond. Détails s'il vous plaît voir ma réponse mise à jour. –