我正在使用DownloadsFolder
方法创建文件和文件夹。
我想将父文件夹作为StorageFolder
实例,这样我就可以列出并操作应用程序下载文件夹中的所有项目。
我已尝试来自已知GetParentAsync()
的{{1}},但返回为空。
StorageFile
是否有任何方法可以通过编程方式访问此文件夹?
答案 0 :(得分:2)
您的应用似乎无权阅读Downloads目录。我们可以使用GetParentAsync
来获取应用拥有权限的父级,但不能获取应用没有权限的文件夹。
如果我们将音乐库,图片库和视频库添加到appxmanifest的功能中,我们可以使用GetParentAsync
方法将父文件夹作为StorageFolder
添加到这些文件夹中。
如果您在“下载”文件夹中创建文件或文件夹,我们建议您将该项目添加到应用程序的FutureAccessList中,以便您的应用程序以后可以轻松访问该项目。
有关详细信息,请参阅Locations Windows Store apps can access。
因此,如果您想获取DownloadsFolder中的其他文件夹和文件,您应该能够Open files and folders with a picker。
答案 1 :(得分:0)
看来这是不可能的-您可以像这样直接使用路径与System.IO
来获取存储文件夹
var downloadPath = System.IO.Path.GetDirectoryName(storageFile.Path);
var downloadsFolder = await StorageFolder.GetFolderFromPathAsync(downloadPath);
但是GetFolderFromPathAsync
似乎引发了异常,我认为Windows不会为您提供对此文件夹的引用。
答案 2 :(得分:0)
一种解决方案是使用文件夹选择器ONCE来选择下载文件夹(作为应用程序初始设置的一部分)。之后,该应用程序可以完全访问downloads文件夹。
此代码需要调用一次:
var folderPicker = new FolderPicker();
folderPicker.SuggestedStartLocation = PickerLocationId.Downloads;
folderPicker.FileTypeFilter.Add("*");
StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if (folder != null)
{
// Application now has read/write access to all contents in the picked folder
// (including other sub-folder contents)
Windows.Storage.AccessCache.StorageApplicationPermissions.
FutureAccessList.AddOrReplace("DownloadFolderToken", folder);
var messageDialog = new MessageDialog("Download folder: " + folder.Name);
await messageDialog.ShowAsync();
}
else
{
var messageDialog = new MessageDialog("Operation cancelled");
await messageDialog.ShowAsync();
}
此代码可用于直接访问下载文件夹:
var downloadsFolder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync("DownloadFolderToken");
IReadOnlyList <StorageFile> fileList = await downloadsFolder.GetFilesAsync();
StringBuilder outputText = new StringBuilder();
outputText.AppendLine("Files:");
foreach (StorageFile file in fileList)
{
outputText.Append(file.Name + "\n");
await file.DeleteAsync();
}