UWP C#:能否固定FolderPicker路径且不弹出对话框访问C盘?
关于FolderPicker指定固定文件夹与无对话框访问C:\的问题
嘿,我来帮你理清这个问题:
首先直接给你结论:FolderPicker本身没办法直接指定固定文件夹并跳过弹出对话框,而且无对话框直接访问C:\根目录,在UWP的安全机制下是有严格限制的,不是随便就能实现的,下面详细说:
为什么FolderPicker不能跳过对话框指定固定文件夹?
FolderPicker的核心设计就是依赖用户主动交互授权——UWP应用默认处于沙箱环境,只能访问应用自身存储、系统预设的库(比如图片、文档库)等有限位置。要访问像C:\这种沙箱外的路径,必须由用户手动通过Picker选择文件夹,系统才会授予应用访问该位置的权限,这是Windows为了保护用户文件安全强制的规则。
那有没有办法无对话框访问C:\?
有两种可行的方案,但都有前提条件:
- 声明
broadFileSystemAccess受限功能
如果你的应用是桌面桥接(Desktop Bridge)打包的应用,或者是针对Windows 10/11的桌面应用,可以在Package.appxmanifest中声明这个受限功能。声明后,你就能直接通过路径访问C:\,不需要依赖FolderPicker。不过注意:这个功能需要应用商店审核,而且用户可以在系统设置里随时关闭这个权限。
示例代码:// 前提:已在Package.appxmanifest中添加broadFileSystemAccess权限 StorageFolder cDrive = await StorageFolder.GetFolderFromPathAsync(@"C:\"); StorageFile file = await cDrive.GetFileAsync("Kundenliste.xml"); - 利用
FutureAccessList的前提是用户已授权过
你代码里用到的StorageApplicationPermissions.FutureAccessList.Add(pfolder),是用来保存用户已经通过Picker选择过的文件夹的权限,之后再次访问这个文件夹时可以跳过Picker。但这必须建立在用户已经手动选择过一次C:\文件夹的基础上,没办法首次访问就直接跳过对话框。
补充:如果是传统桌面应用(非UWP)
如果你的应用不是UWP,而是WPF、WinForms这类传统桌面应用,那根本不需要用FolderPicker或者UWP的存储API,直接用System.IO命名空间下的类就能访问C:\,比如:
FileInfo file = new FileInfo(@"C:\Kundenliste.xml"); // 后续操作...
内容的提问来源于stack exchange,提问作者Hubii
相关产品推荐
相关产品推荐

