UWP平台如何通过FolderRelativeId获取并打开对应文件?
UWP 存储权限与文件访问问题解答
1. 借助 StorageApplicationPermissions.FutureAccessList 打开已授权文件
StorageApplicationPermissions.FutureAccessList 是UWP提供的持久化文件/文件夹访问权限的工具,使用流程如下:
- 首次通过文件选择器拿到目标
StorageFile实例时,将其加入权限列表,保存返回的访问令牌:
// file 为 FileOpenPicker 选中的 StorageFile 对象 string accessToken = StorageApplicationPermissions.FutureAccessList.Add(file, "可选自定义备注"); // 需将 accessToken 持久化存储到本地配置、数据库等位置,后续启动应用可读取
- 后续需要打开文件时,直接使用存储的令牌获取文件实例,无需再次唤起选择器:
StorageFile targetFile = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(accessToken); // 拿到 targetFile 后即可正常调用 OpenAsync、ReadTextAsync 等方法读写文件
注意:FutureAccessList 最多支持存储1000个授权条目,超出上限后新增条目会自动移除最早添加的旧条目
2. FolderRelativeId 的用法与打开文件的可行性
FolderRelativeId 是存储项(文件/文件夹)相对于其所属父级 StorageFolder 的唯一标识符,你看到的6250CF578FDF6C5/Song.mp3格式是它的标准输出。
核心规则
不能直接使用单独的 FolderRelativeId 字符串打开文件,它必须配合已授权的父级文件夹使用,本质是父文件夹下的相对定位标识,脱离父文件夹权限后没有实际作用。
适用场景
适合批量管理同一个授权文件夹下的多个子文件:仅需要给父级文件夹申请1个FutureAccessList授权令牌,所有子文件只需存储各自的FolderRelativeId即可,不需要为每个子文件单独申请权限,大幅节省FutureAccessList的1000条配额。
使用流程
- 首次通过
FolderPicker选中目标父文件夹,将其加入FutureAccessList,保存返回的父文件夹访问令牌 - 记录该文件夹下需要访问的子文件的
FolderRelativeId:
string relativeId = targetSongFile.FolderRelativeId;
- 后续打开子文件时,先通过父文件夹令牌获取已授权的父文件夹实例:
StorageFolder parentFolder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(parentFolderAccessToken);
- 用
FolderRelativeId在父文件夹下定位到目标文件:
StorageFile targetSong = await parentFolder.GetItemAsync(relativeId) as StorageFile;
内容的提问来源于stack exchange,提问作者wonyh_
相关产品推荐
相关产品推荐

