2016-11-23 3 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() 방법을 사용할 필요가 없습니다. 코드는 다음과 같습니다 :

자세한 내용은 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/)를 설정해야합니다. library/windows/apps/windows.storage.search.queryoptions.folderdepth.aspx) 속성을 deep로 설정합니다. 자세한 내용은 내 업데이트 된 답변을 참조하십시오. –