You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动