You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP应用文件访问被拒求助:FileOpenPicker选文件后读取失败

解决UWP中FileOpenPicker选文件后访问路径被拒绝的问题

我明白你现在卡在哪了——明明通过FileOpenPicker手动选了CSV文件,结果调用File.ReadAllLines(file.Path)时直接触发了"Access to the path is denied"错误。这其实是UWP的沙箱机制在起作用,咱们来理清楚原因并解决它:

问题根源

你查到的"应用可访问用户手动选择的目录和文件"没错,但UWP的权限规则有个关键点:即使是用户手动授权的文件,你也不能直接通过文件路径用System.IO类的API访问。沙箱会严格限制这种直接路径读写的操作,正确的姿势是通过StorageFile对象本身提供的API来操作文件内容。

修改后的可行代码

把你原来的读取逻辑替换成UWP支持的方式就行,这里给你两种常用方案:

public async void CsvParse()
{
    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.FileTypeFilter.Add(".csv");
    Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
    
    if (file != null)
    {
        // 方案1:用UWP内置的FileIO直接读取所有行
        IList<string> lines = await Windows.Storage.FileIO.ReadLinesAsync(file);
        // 若需要转成string[],直接调用ToArray()即可
        string[] linesArray = lines.ToArray();

        // 方案2:通过流的方式读取(适合复杂处理场景)
        // using (var stream = await file.OpenStreamForReadAsync())
        // using (var reader = new StreamReader(stream))
        // {
        //     string fullContent = await reader.ReadToEndAsync();
        //     string[] linesArray = fullContent.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
        // }
    }
}

额外提示

另外建议尽量避免用async void(除非是事件处理程序),换成async Task能让代码的错误处理和可维护性更好,比如:

public async Task CsvParse()
{
    // 内部逻辑和上面一致
}

内容的提问来源于stack exchange,提问作者Cruwiel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:19:17