UWP访问被拒绝给StorageFile

时间:2019-02-04 12:16:17

标签: c# uwp storagefile

使用时我被拒绝访问

StorageFile.GetFileFromPathAsync(filePath)

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

使用FilePicker,我可以毫无疑问地访问这些位置,但是StorageFile.GetFileFromPathAsync是在页面加载时自动将这些文件加载​​到列表中。

如何使用此功能在已知文件夹(视频库,视频等)之外加载文件。

1 个答案:

答案 0 :(得分: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。但是,这是一项受限制的功能,您的应用必须有充分的理由使用它。