UWP使用BroadFileAccess权限却无对应文件系统API的技术咨询
嘿,这个问题我之前帮不少开发者解决过——BroadFileAccess权限确实有点特殊,不像KnownFolders.VideoLibrary那样有直接的根目录API入口,但其实操作起来也没那么复杂,我给你一步步拆解:
如何在UWP中使用BroadFileAccess权限构建视频资源管理器应用
首先得明确:BroadFileAccess是面向桌面UWP应用的权限(移动设备不支持),它允许你访问用户整个文件系统,但确实没有现成的KnownFolders.FileSystem这类API,所以得换个思路来获取驱动器和文件路径。
1. 先在应用清单中声明权限
这个权限在Visual Studio的可视化清单设计器里是看不到的,必须手动修改Package.appxmanifest文件:
- 用文本编辑器打开清单,找到
<Capabilities>节点,添加以下声明:
<uap:Capability Name="broadFileSystemAccess" />
- 额外提醒:用户需要手动在Windows设置 > 隐私和安全性 > 文件系统中给你的应用开启权限,否则代码会抛出权限不足的异常。
2. 获取文件系统根目录(逻辑驱动器)
既然没有现成的根目录API,我们可以借助System.IO.DriveInfo类获取所有可用逻辑驱动器,再转换成StorageFolder对象用于后续操作:
using System.IO; using Windows.Storage; using System.Linq; // 获取所有就绪的逻辑驱动器 var availableDrives = DriveInfo.GetDrives().Where(drive => drive.IsReady); List<StorageFolder> rootFolders = new List<StorageFolder>(); foreach (var drive in availableDrives) { try { // 将驱动器路径转换为StorageFolder var rootFolder = await StorageFolder.GetFolderFromPathAsync(drive.RootDirectory.FullName); rootFolders.Add(rootFolder); } catch (UnauthorizedAccessException) { // 处理权限未开启的情况,可引导用户去设置开启 Debug.WriteLine($"无法访问驱动器 {drive.Name}:权限不足"); } }
这样你就能拿到和传统资源管理器一致的左侧导航根目录列表了。
3. 访问任意路径的视频文件
有了BroadFileAccess权限后,你可以直接通过路径访问任意文件夹/文件,比如遍历指定路径下的视频:
// 访问自定义路径下的文件夹 var targetFolder = await StorageFolder.GetFolderFromPathAsync(@"D:\Personal\VideoCollection"); // 按名称排序获取所有文件,筛选视频格式 var videoFiles = await targetFolder.GetFilesAsync(CommonFileQuery.OrderByName); var filteredVideos = videoFiles.Where(file => file.FileType.Equals(".mp4", StringComparison.OrdinalIgnoreCase) || file.FileType.Equals(".mov", StringComparison.OrdinalIgnoreCase) || file.FileType.Equals(".avi", StringComparison.OrdinalIgnoreCase) );
关键注意事项
- 商店审核要求:如果要提交应用到Microsoft Store,必须在审核时详细说明使用BroadFileAccess的必要性(比如你的应用是视频管理器,需要遍历全系统检索视频文件),否则会被拒绝。
- 权限检查:操作文件前建议先检查权限状态,比如用
Windows.ApplicationModel.Package.Current.IsCapabilityDeclared("broadFileSystemAccess"),同时捕获UnauthorizedAccessException,引导用户去设置开启权限。 - 性能优化:遍历全系统时要注意异步加载和分页处理,避免UI卡顿。
内容的提问来源于stack exchange,提问作者Muhammad Touseef
相关产品推荐
相关产品推荐

