UWP C#中FileOpenPicker打开文本文件到RichEditBox时访问拒绝解决方法
解决UWP中FileOpenPicker选择文件后“Access Denied”的问题
嘿,我帮你梳理下这个权限拒绝问题的原因和解决办法:
问题大概率出在这两个核心点:
- 文件类型过滤器的不合理设置
- 错误的文件读取方式(违反UWP沙箱机制)
1. 先修正FileOpenPicker的过滤器配置
你代码里加了*通配符,这在UWP的文件选择器里容易触发权限判断异常,UWP推荐只添加明确需要的文件扩展名。把*去掉,只保留你需要的类型:
var picker = new FileOpenPicker(); picker.ViewMode = PickerViewMode.Thumbnail; picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; // 移除通配符*,只保留明确的目标扩展名 picker.FileTypeFilter.Add(".txt"); picker.FileTypeFilter.Add(".text"); picker.FileTypeFilter.Add(".bat");
2. 用UWP合规的方式读取文件内容
UWP应用运行在沙箱里,绝对不能用传统的System.IO.File类(比如File.ReadAllText)去读取通过选择器获取的文件——哪怕是用户主动选的,直接读路径也会触发权限拒绝。必须用StorageFile提供的异步API来读取:
// 弹出选择器并获取用户选中的文件 StorageFile selectedFile = await picker.PickSingleFileAsync(); if (selectedFile != null) { // 用UWP内置的FileIO读取文本内容 string fileContent = await FileIO.ReadTextAsync(selectedFile); // 将内容加载到你的RichEditBox中 yourRichEditBox.Document.SetText(Windows.UI.Text.TextSetOptions.None, fileContent); }
额外提醒:
如果你的代码是在非UI线程调用FileOpenPicker,也会出问题——文件选择器必须在UI线程执行。如果是这种情况,需要切换到UI线程再调用:
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => { // 把FileOpenPicker的创建和调用代码放在这里 });
内容的提问来源于stack exchange,提问作者Miguel Genaro




