2016-11-23 35 views
2

フォルダピッカーで選択されたフォルダにアクセスする方法のMicrosoftの例に従った。これを実行した後、私は選択されたトップフォルダ内のサブフォルダのすべてのパスを取得したかったのです。私はしかし、結果を得ることはありません。StorageFolderが非同期取得のデータを取得しない

コード:

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オブジェクトが値を持っています。次のようにコードでfolderListをチェックするために、あなたのgetfolders方法を更新してください:私が選択したトップフォルダ内のサブフォルダのすべてのパスを取得したい

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に設定します。詳細は私の更新された答えを見てください。 –

関連する問題