【问题标题】:UWP Access Denied to StorageFileUWP 访问 StorageFile 被拒绝
【发布时间】:2019-06-28 04:19:04
【问题描述】:

我在使用时被拒绝访问

StorageFile.GetFileFromPathAsync(filePath)

从我阅读的其他帖子和一些文档中,UWP 只能在 Package.appxmanifest 等中声明时访问视频库、视频(与配置文件相关的文件夹)...

使用 FilePicker 访问这些位置没有问题,但 StorageFile.GetFileFromPathAsync 是在页面加载时自动将这些文件加载​​到列表中。

如何使用此功能加载已知文件夹视频库、视频等之外的文件。

【问题讨论】:

  • 我认为过程是向用户询问文件夹的权限,然后您可以将其存储以备将来使用。
  • 如何使用 StorageFile.GetFileFromPathAsync 做到这一点?
  • 这是最愚蠢的重复,请在 docs.microsoft.com/en-us/windows/uwp/packaging/… 上查找 broadFileSystemAccess

标签: c# uwp storagefile


【解决方案1】:

您只能使用此方法访问 UWP 应用可以访问的安全路径上的文件。如果您通过文件或文件夹选择器访问另一个位置,则必须使用 Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList 缓存对它的访问。此 API 允许您存储StorageFileStorageFolder 的现有实例,并为您提供一个“令牌”,即string,您以后可以通过它再次访问选定的StorageItem

StorageFile file = await savePicker.PickSaveFileAsync();
if (file != null)
{
    string faToken = StorageApplicationPermissions.FutureAccessList.Add(file);  
}

现在文件位于FutureAccessList,您可以稍后检索它:

StorageFile file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(faToken);

存储在FutureAccessList 中的项目即使在应用程序关闭并重新打开时仍然存在,因此它可能是您的用例的理想解决方案。但是,请记住 FutureAccessList 最多可以存储 1000 个项目(请参阅 Docs),并且您必须维护它 - 因此,如果您不再需要某个项目,请确保将其删除,以便它不计入限制了。

第二种解决方案是声明broadFileSystemAccess capability。然而,这是一项受限功能,您的应用必须有充分的理由使用它。

【讨论】:

  • 嗨,我尝试了 broadFileSystemAccess 但没有成功。目标是保存这些 FS 位置,然后 App 将监视这些文件夹路径并处理其中的文件(是文件观察器),也就是说,您说 FutureAccessList 将在应用程序关闭时继续存在,但它会在计算机重新启动时继续存在吗?你看,我不想每次重新启动计算机时都配置那些 FS 位置。我想到的方法是在文件设置中配置这些位置 1 次,然后每次应用程序运行时自动进程都会监控这些位置
  • 是的,FutureAccessList 将在应用程序关闭和计算机重新启动后继续存在。只要您拥有令牌,您就可以随时从 FAL 检索引用。
  • 感谢您的帮助,我会试一试,谢谢。
  • 让我知道它是否有效,请考虑将问题标记为已解决:-)。
  • 该解决方案有效,但对于我的场景,我需要考虑如何实现它,因为还有其他事情需要考虑:)
猜你喜欢
  • 1970-01-01
  • 2018-05-17
  • 2021-09-18
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多