StorageFolder 没有通过获取文件夹异步获取任何数据
StorageFolder not getting any data back with get folders async
我遵循了 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
什么也没给我。
FolderList gives me nothing.
您获得的 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);
}
I wanted to get all the paths of the sub folders within the selected top folder. I don't get any results however.
实际上,如果你想列出所有的,你可以使用StorageFolder.GetFoldersAsync() method to get all sub folders for the selected top folder object, there is no need to use 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设置为deep。代码如下:
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);
}
我遵循了 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
什么也没给我。
FolderList gives me nothing.
您获得的 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);
}
I wanted to get all the paths of the sub folders within the selected top folder. I don't get any results however.
实际上,如果你想列出所有的,你可以使用StorageFolder.GetFoldersAsync() method to get all sub folders for the selected top folder object, there is no need to use 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设置为deep。代码如下:
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);
}